유닉스 운영체제 0629379 장 은철1. 유닉스의 개 요 유닉스란 - 컴퓨터 시스템을 효율적으로 사용하기 위한 운영체 제의 일종 유닉스의 탄생과 발전과정 - 1969 , AT T 벨 연구소에서 개발 - 켄 톰슨 (Ken Thompson), 데니스 리치 (Dennis Ritche ) - 최초에는 어셈블리어로 작성 , 후에 C 언어로 재작성 - 초기 UNIX 소스 코드는 대학에 공개됨 - 버클리 대학에서 수정한 UNIX 를 BSD 라고 함 -Berkeley Software Distribution - 가장 중요한 개선은 네트워킹 기능의 추가 -AT T 버전은 System III, System V 등 - 현재는 UNIX 는 상용제품으로 비용을 지불해야 함 - 그래서 나온 것이 초기의 공개 S/W 정신을 되살린 Linux 임유닉스의 설계 원리 - 유닉스는 시분할 시스템과 다수의 프로세스들을 지원하도록 설계되었다 . - 유닉스는 소형 컴퓨터에 대한 운영체제의 아주 좋은 본보기 크기가 작고 이해하기 쉬움 - 대화형으로 설계되어 프로그램 개발을 위한 기능에 좀 더 높은 우선순위 부여 - 유틸리티들이 서로 결합되어 사용할 수 있도록 설계됨 - 적절한 유틸리티 선택가능 - 이식성을 위해 C 언어 채택 - 유닉스 소스들을 누구나 사용할 수 있도록 온라인화 ( 개방성 ) - 다양화현상 촉진 1. 유닉스의 개 요유닉스의 구조 - 유닉스 운영체제는 3 가지 수준 ( 사용자 , 커널 , 하드웨어 ) 으로 이루어짐 - 커널 – 1) 파일 서브시스템 2) 프로세스 제어 서브시스템 1. 유닉스의 개 요 1) 파일 서브시스템 (1) 파일 서브시스템은 블록 또는 문자 스트림의 형태로 데이터를 전송하는데 메모리 , 외부장치에 데이터를 전송하거나 블록 단위로 입출력을 실행할 경우 메모리의 일부를 버퍼로 할당하고 이것을 사용자의 주소 공간과 외부장치 사이에 위치시키는 디스크 캐시 기법을 사용하여 파일을 관리 . (2) 파일공간할당 , 자유공간관리 , 파일 액세스 제어 , 데이터를 가져오는 역할 (3- 자신의 스택과 데이터를 읽거나 쓸수 있지만 다른 …………... 프로세스는 불가능 - 모든 프로세스는 fork 시스템 호출에 의해 생성됨 ( 프로세스 0 제외 ) 2 . 프로세스 관리 유닉스 프로세스 종류 ① 사용자 프로세스 : 단말기의 사용자와 관련된 프로세서 ② 커널 프로세스 : 커널모드에서 실행되며 프로세스 0 이 해당됨 ③ 데몬 프로세스 : 다른사용자와 전혀 관련이 없지만 전역함수와 같이 네트워크 제어 , 관리 등 시스템을 지원하는 프로세스프로세스 상태 - 시분할 환경의 시스템에서 프로세스는 생성 , 준비 , 대기 , 실행 , 종료 등으로 구분 2 . 프로세스 관리 유닉스 프로세스 상태 수행 . - 프로세스가 현재 사용자 모드 또는 커널 모드 에서 수행 중일 때를 가리킴 . 준비 . - 스케줄러가 선택되면 수행될 수 있는 준비 상 태 , 즉 실행대기 상태가 됨 . 수면 ( 대기 ). - 입출력 완료를 기다리거나 , 다른 프로세스가 종료되기를 기다리는 상태 , 시스템이 자원 이용 가능해지기를 기다리는 상태 등 더 이상 수행할 수 없을 때를 가리킴 .프로세스의 데이터 구조 1) 프로세스 테이블 - 프로세스 상태 필드 ( 준비 , 실행 , 수명 상태 등 ), 사용자 영역 포인터 , 프로세스 식별자 (ID 또는 PID), 사용자 식별자 (ID 또는 UID), 프로세스 크기 , 이벤트 디스크립터 , 스케줄링 매개변수 항목 등의 정보를 갖고 있음 - 텍스트 테이블을 유지 - 공유 코드에 대한 메인 메모리 주소와 이 코드를 사용하는 프로세스의 개수 추적 계수기 등의 정보 포함 2 . 프로세스 관리프로세스의 데이터 구조 2 ) 사용자 테이블 - 사용자 프로세스는 사용자 프로그램에 필요한 기본적인 요소들로 구성 - 사용자 프로그램은 텍스트 영역 , 데이터 영역 , 스택 세그먼트로 구분 - 텍스트영역 - 프로그램의 명령어들이 저장됨 ( 읽을 수만 있음 ) - 데이터영역 , 스택 - 항상 같은 주소 공간에 있지만 독립적으로 반대 방향으로 늘어남 - 사용자 테이블은 커널 - 파일 시스템의 루트에서부터 시작되고 , 이름의 시작 부분이 ‘ /’ 임 . 상대 경로명 . - 현재 디렉터리에서 시작 . * local/font 는 현재 디렉터리 내에 있는 local 이라는 디렉터리에서 font 라는 이름의 파일 또는 디렉터리를 가리킴 . - 디렉터리에서 “ .” 이라는 파일명은 디렉터리 자신에 대한 하드 링크임 . 하드웨어 장치는 파일 시스템 내에서 이름을 가짐 . 특수 파일들은 장치 인터페이스로서 커널에 인식되나 다른 파일처럼 시스템 호출에 의해 또는 사용자에 의해서 액세스할 수 있음 . 3. 프로그래머 인터페이스파일조작 - / dev : /dev/console, /dev/1p0, /dev/mt0 등과 같은 특수 장치 파일들을 가짐 . - / bin : 유닉스 시스템 프로그램들에 꼭 필요한 2 진 파일들을 가짐 . - / usr /bin : 문장 형식기 (Text Formatters) 등과 같은 응용 시스템들을 가짐 . - /lib, / usr /lib, / usr /local/lib 등에는 C, Pascal, FORTRAN 등의 서브루틴 라이브러리 파일들을 보관 . - / home : 사용자 파일들을 각 사용자 디렉터리에 저장 . - / etc : 시스템에서 많이 사용하는 관리 파일들 존재 . 3. 프로그래머 인터페이스파일조작 ( 2) 기본적인 파일 조작에 대한 시스템 호출 . - creat : 주어진 경로명에 따른 파일 ( 빈파일 ) 을 생성 또는 파일 제거 . - open : 존재하는 파일을 개방 ( 경로명과 읽기 , 쓰기 , 읽고 쓰기 등과 같은 모드 유지 ). - close : 파일을 닫음 . - trunc : 파일의 길이를 0 으로 감소시킴 . - read/write : 입출력 수행 , 즉 파일로부터 정보를 추출 (read ) 하며 버퍼로부터 자료를 외부파일로 복사 (write) 함 . - unlink : 링크 제거 . 3. 프로그래머 인터페이스프로세스 제어 - 프로세스란 실행 중인 프로그램으로 정수로 된 프로세스 식별자 과부하가 적지만 메모리의 외부 단편화는 심각한 문제를 야기 4 . 메모리 관리교체 기법 1) 교체 공간의 할당 - 커널은 단편화를 고려하지 않고 교체장치에 연속 공간을 할당 . - 커널은 파일 시스템의 자유 공간을 슈퍼 블록에서 액세스되는 자유 블록의 연결 목록으로 관리하나 , 교체장치의 자유 공간은 맵 테이블에 유지 . - 메모리와 교체를 위한 공간의 할당은 최초 적격 전략을 이용 . 4 . 메모리 관리4 . 메모리 관리 교체 기법 2) 프로세스의 스왑 ( 교체 ) - 커널은 한 프로세스의 가상 주소 공간을 교체장치에 사용할 필요는 없음 . - 대신 커널은 프로세스에 배정된 물리적 메모리를 교체장치에 복사하며 배정되지 않은 가상 주소를 무시 . - 커널이 프로세스를 메모리로 다시 교체할 때 , 정확한 가상 주소에 재배정할 수 있도록 그 프로세스의 가상 주소 맵을 알아야 함 . - 데이터 버퍼로부터 물리적 메모리로의 추가 복사를 하지 않음 .페이징 기법 - VAX 4.2 BSD 는 요구 페이징 가상 메모리 기법을 사용 . - 외부단편화 제거되었지만 내부단편화 발생 - 복잡한 하드웨어 구성과 시스템 부하의 증가 - 작업부하가 클 경우 스레싱 현상 가져올 수 있음 - 프로세스 및 디스크 블록 버퍼에 메인 메모리의 페이지 프레임 들을 할당하는 가상메모리 기능을 제공 = 효과적인 메모리 관리 가능 4 . 메모리 관리블록과 단편화 - 대부분의 파일 시스템은 실제로 저장하는 데이터 블록을 구성 - 유닉스 시스템 4.3 BSD 에서는 내부 단편화를 줄이기 위해 5. 파일 시스템 유닉스 파일 시스템은 구 객체 , 즉 파일과 디렉터리를 지원 - 디렉터리는 특별한 형태의 파일이며 트리구조 디렉터리를 가진 파일시스템 . 1) 디스크 블록의 할당 - 한 프로세스가 파일에 데이터 저장 시 , 커널은 직접 데이터 블록과 간접 데이터 블록을 위해 파일 시스템에 디스크 블록을 할당해야 함 .블록과 단편화 2) 디스크 블록 영역 - 파일에 있는 데이터 블록 개수는 시스템의 고정 블록의 크기- 파일 B 의 크기를 15 개의 블록으로 확장하려면 , 커널이 파일 B 를 15 개의 연속된 공간이 있는 영역으로 복사해야함 (b). - 파일 B 가 사용했던 공간은 10 블록 이하인 경우에 사용할 수 있음 . 5. 파일 시스템 연속 파일의 할당과 자유 공간의 단편화I – 노드 제어 - 각 파일은 하나의 i - 노드에 의해 제어됨 - 메인 메모리 내 (in-core) i - 노드의 복사본은 디스크의 i - 노드의 내용과 함께 다음과 같이 추가 필드를 포함함 . 5. 파일 시스템 새로운 파일에 I – 노드 할당 - iget 및 ialloc 알고리즘 이용 . - 슈퍼 블록의 자유 i - 노드의 목록이 비어있으면 커널은 디스크를 탐색 , 가능한 많은 자유 i - 노드를 찾아 자유 i - 노드 목록을 채움 . - 자신이 찾은 가장 높은 자유 i - 노드의 번호를 기억 . - 커널은 디스크 i - 노드를 할당할 때마다 슈퍼 블록의 자유 i - 노드계수 ( 인덱스 ) 를 감소시킴 .I – 노드 반납 - 파일 시스템에서 사용 가능한 i - 노드의 수를 증가시킴 . - 커널은 슈퍼 블록에 대한 잠금 (Lock) 유무를 검사한 후 , 잠겨 있으면 즉시 복귀하고 아니면 i - 노드 목록에 i - 노드를 추가할 장소가 있는지를 조사하여 i - 노드 번호를 i - 노드 목록에 삽입하고 복귀 . - 커널은 반납된 i - 노드 번호와 기억된 i - 노드 번호를 비교 . - 커널은 항상 리스트의 제일 마지막 i - 노드가 기억된 i - 노드가 되도록 슈퍼 블록의 리스트를 유지함 . - 슈퍼 블록의 자유 i - 노드 목록에 공간이 있으면 반납된 i - 노드 번호를 넣고 , 다음 자유 i - 노드에 대한 인덱스를 증가시킨 후 진행을 계속함 5. 파일 시스템디렉터리 - 파일과 디렉터리 구현 시 차이는 거의 없음 . - 디렉터리 내용은 데이터 블록에 있고 , 일반 파일과 같이 i - 노드로 표현 . - 일반 파일은 구조가 없으나 디렉터리는 특별한 구조를 가짐 . 5. 파일 시스템 시스템 파일how}