UNIX 및실습 14 장. 유닉스내부구조 1
학습목표 유닉스커널의기능과구조를이해한다. 파일시스템의내부구조를이해하고, inode 가무엇인지배운다. 프로세스가어떻게동작하는지이해한다. 메모리가사용되는방식을이해한다. 프로세스간통신방식에는어떤것이있는지이해한다. 입출력장치는어떻게동작하는지이해한다. 2
Section 01 유닉스커널의구조 커널의정의 프로세스관리와메모리관리, 입출력관리, 파일시스템관리등과같이운영체제가수행하는핵심적인기능을수행 커널의기능 항상메모리에상주하면서시스템을관리 사용자와하드웨어사이를연결 모든운영체제는각자독특한커널구조를가지고서비스를제공 3
커널의구성요소 4
Section 02 파일시스템이란 파일시스템이란 파일을저장하기위한공간을할당하고, 파일에대한접근을제어하는등파일을관리하는기능을담당 유닉스시스템은파일이나디렉토리를주로하드디스크장치에저장하게되는데, 한시스템에하나이상의디스크장치를설치 파티션 하드디스크는관리의편리를위해보통몇개의파티션으로분할해사용 각파티션에는하나의파일시스템이구성 커널은디스크단위가아닌파티션별로장치번호를붙여서관리 5
디스크구조 [1/2] 하드디스크의물리적인구조 여러장의플래터 ( 디스크 ) 와읽기 / 쓰기헤드로구성 하드디스크의논리적인구조 트랙과섹터로구성 각플래터의같은위치에있는트랙들을실린더라고부름 실린더 섹터 트랙 6
디스크구조 [2/2] 디스크접근방법 블록단위접근 블록은일반적으로 8KB 블록단위로읽고, 쓰기실행 일반적으로디스크를읽거나쓸때블록단위로접근 문자단위접근 섹터단위로읽고, 쓰기실행 섹터의기본크기는 512 바이트 Raw Device 라고도함 파일시스템을검사할때문자단위로접근 디스크레이블 디스크의파티션정보 보통 0 번트랙, 0 번섹터에저장 레이블이깨지면디스크를읽을수없음 7
파티션 파티션과파일시스템 [1/2] 하드디스크를보다작은단위로나누어사용할때이용하는작은단위 유닉스에서하드디스크는 8 개의파티션으로나누고각파티션별로번호를붙여사용 디스크를파티션으로나누는작업은유닉스를설치할때수행 파티션은윈도우의 C, D 드라이브같이각각독립적인드라이브처럼사용 솔라리스에서는 8 개까지파티션을나눌수있음 8
파티션과파일시스템 [2/2] 솔라리스의파티션과파일시스템 파티션파일시스템기능 0 / (root) 시스템부팅과환경설정에필요한파일과디렉토리및다른파일시스템을연결하는디렉토리를가지고있는파티션 1 Swap 가상메모리에필요한임시메모리공간으로사용되는파티션 2 전체전체디스크를나타내는파티션 3 usr 사용자명령과각종유틸리티를가지고있는파티션 4 5 6 7 분할가능한파티션들 솔라리스설치시각파티션에적절한파일시스템을생성보통사용자홈디렉토리를위한파티션 (/export/home), 부가적인소프트웨어를설치하는파티션 (/opt, /usr/local 등 ) 등을설치 9
파일시스템구조 [1/4] 10
파일시스템구조 [2/4] 부트블록 파일시스템의 1 번섹터부터 15 번섹터까지의 15 개섹터에위치 부팅시유닉스를초기화하기위한부트스트랩코드를가지고있음 유닉스커널이설치된루트파일시스템은부트블록에실제부트스트랩코드를가지고있으나나머지파일시스템은처음 15 개섹터를비워두고있음 기본수퍼블록 부트블록다음의 16 개섹터는기본수퍼블록 수퍼블록은해당파일시스템에대한모든정보를가지고있음 데이터블록의수, 실린더그룹의수, 데이터블록의크기, 하드웨어정보, 파일시스템을마운트할디렉토리위치, 파일시스템의상태정보등이수퍼블록에저장 11
파일시스템구조 [3/4] 실린더그룹 파일시스템을구성하는실린더들은관리의편의를위해다시그룹으로나누어놓은것 한개의실린더그룹은보통 16~256 개의실린더로구성 각실린더그룹은백업수퍼블록, 실린더그룹블록, inode 테이블, 데이터블록으로구성 백업수퍼블록 각실린더그룹의처음 16 섹터는기본수퍼블록을복사한백업수퍼블록을저장 기본수퍼블록이깨졌을경우백업수퍼블록중하나를이용해다시복구가능 실린더그룹블록 백업수퍼블록다음에는실린더그룹블록이위치 해당실린더그룹이관리하는 inode 의총개수, 데이터블록의총개수, 디렉토리의개수, 사용가능한블록수, 사용가능한 inode 수가저장 12
inode 테이블 파일시스템구조 [4/4] 파일이나디렉토리를관리하기위한 inode 들이저장 inode 는파일마다할당되며파일의소유자, 수정날짜, 크기, 데이터블록의위치등의정보를저장 데이터블록 실제파일의내용이저장되는곳 유닉스에서데이터블록의기본크기는 8KB 필요시 1KB 단위로나누어서파일에할당도가능 단편화 (Fragmentation) 13
파일의내부표현 inode [1/2] 파일의내부적표현 index node( 색인노드 ) 파일의소유자, 파일의접근허가, 파일크기, 파일수정시간, 파일접근시간, 데이터블록의위치, 하드링크수등의정보를저장 유닉스에서파일이름은하나의 inode 로연결 같은 inode 와연결된파일이름은여러개가있을수있으며, 같은 inode 에연결된파일이름을링크라고함 14
파일의내부표현 inode [2/2] 유닉스에서만들수있는최대파일크기 96KB + 16,384KB(8KB * 2048 개 ) + 33,554,432KB(8KB * 2048 개 * 2048 개 ) + 68,719,476,736KB (8KB * 2048 개 * 2048 개 * 2048 개 ) = 약 64TB 15
Section 03 프로세스관리 프로세스는실행중인프로그램 커널은 CPU 의작업순서를적절히스케줄링하여프로세스를처리함으로써여러개의프로세스가동시에수행되는것처럼나타남 프로세스의구조 16
프로세스구조 텍스트영역 실행코드가저장되며, 프로세스실행중크기가변하지않는고정영역 데이터영역 프로그램에서정의된전역변수가고정영역에할당 힙 (Heap) 영역 프로그램의실행중에동적으로메모리를요청하는경우에할당되는영역으로가변영역 스택영역 빈공간 프로그램에서정의된지역변수를위한가변영역 가변영역을위한빈메모리영역 17
프로세스의상태와전이 1) 프로세스가실행되면일단사용자모드에서수행된다. 2) 사용자모드에서시스템호출을하면커널모드로전환되어커널모드에서수행된다. 3) 커널모드에서수행중입출력완료를기다릴때와같이더이상수행을계속할수없을때수면상태로전환된다. 4) 수면중이던프로세스가깨어나수행대기상태로전환되어스케줄링이되면바로실행될수있도록준비한다. 18
프로세스의생성 프로세스번호 (PID) 유닉스에서실행중인프로세스에할당되는번호 프로세스의생성 0 번프로세스 : 부팅시자동으로생성 1 번프로세스 : 0 번프로세스가생성, init 프로세스, 나머지모든프로세스의조상 프로세스생성과정 부모프로세스가 fork 시스템호출로자식프로세스생성 exec 시스템호출로자식프로세스에서다른프로그램을실행 19
특별한프로세스 고아프로세스 자식프로세스가돌아오기를기다리지않고부모프로세스가종료할경우이자식프로세스들이고아프로세스 고아프로세스들은모두 1 번프로세스의자식프로세스로등록되어실행을마치고정상적으로종료 좀비프로세스 이미사용중인모든자원을반납했지만부모프로세스로부터승인을받지못한상태의프로세스 좀비프로세스들은실제로실행되고있지는않은프로세스이지만동작중인프로세스테이블목록을차지하고있음 프로세스목록에 defunct 프로세스라고나오기도함 일반적인방법으로는없앨수가없음 20
Section 04 메모리관리 [1/3] 가상메모리 기존메모리와하드디스크공간의일부를합하여사용하는기법 수면상태이거나대기상태인프로세스들을하드디스크에저장했다가실행할순서가되면다시메모리로읽어들이면 CPU 에서실행중인프로세스에충분한메모리를제공가능 커널의메모리관리시스템은가상메모리의동작을관리 스와핑 가상메모리로사용되는하드디스크장치를스왑장치 프로세스를스왑장치에기록했다가, 다시읽어오는동작을스와핑 (Swapping) 스왑아웃 (swap Out) : 스왑장치로프로세스를이동 스왑인 (swap in) : 다시메모리로읽어드리는것 21
메모리관리 [2/3] 가상메모리와스와핑 22
메모리관리 [3/3] 요구페이징 (Demand Paging) BSD4.0 유닉스에서도입 프로세스를페이지라는단위로나누어관리 실행에필요한페이지만메모리에두고, 나머지페이지는스왑장치에두었다가요구가있으면해당페이지를메모리로읽어들이는기법 요구페이징을사용하면프로세스를페이지로나누어스와핑을하므로프로세스의크기에제약을받지않아도되는장점이있음 23
Section 05 프로세스간통신 [1/3] 프로세스간통신 IPC (InterProcess Communication) 프로세스간에정보를주고받는것 한시스템내에서의 IPC 파이프 (pipe) 두프로세스간에한쪽방향으로통신을할수있도록지원 쉘에서 기호는파이프를의미 pipe 시스템호출로구현이가능 파이프에이름이붙지않은언네임드파이프 (Unamed Pipe) 와이름이붙어있는네임드파이프 (Named Pipe) 로구분 네임드파이프는 FIFO라고도부름 fork() 부모프로세스 쓰기 pipe() 파이프 24 자식프로세스 읽기
프로세스간통신 [2/3] 한시스템내에서의 IPC ( 계속 ) 시스템 V IPC telnet hanbitbook.co.kr 메시지큐, 공유메모리, 세마포어 메시지큐 : 프로세스들사이에메시지를주고받는기능을지원 공유메모리 : 프로세스들이메모리를공유하고이를통해통신하는기능을지원 세마포어 : 메모리에접근하는프로세스들의동기화를지원 ipcs 명령으로시스템 V IPC 확인가능 $ ipcs IPC status from <running system> as of 2006 년 4 월 18 일화요일오후 02 시 38 분 01 초 Message Queue facility inactive. T ID KEY MODE OWNER GROUP Shared Memory: m 0 0x50038969 --rw-r--r-- root root Semaphores: $ 25 세마포어 공유메모리 메시지큐
프로세스간통신 [3/3] 네트워크를이용한통신 TCP/IP 프로토콜이용 소켓인터페이스제공 응용프로그램 소켓 응용프로그램 소켓 TCP/UDP TCP/UDP IP IP 네트워크 26
Section 06 입출력장치관리 [1/3] 프로세스와디스크, 테이프장치, 터미널, 프린터, 랜카드같은주변장치와통신을할수있도록지원 장치를제어하는커널의모듈을장치드라이버 사용하는장치의종류에따라모두가지고있어야함 특수파일 장치를파일로취급하는데이를특수파일이라고함 장치들도일반파일처럼파일명을가지고있음 솔라리스의경우하드디스크장치명은 c0t0d0s0 와같은형태를사용 27
입출력장치관리 [2/3] 블록장치 디스크와테이프같은장치 블록단위 (8KB) 로읽고씀 문자장치 터미널같이블록장치가아닌다른장치 블록장치들도문자장치인터페이스를가질수있음 디스크를읽고쓸때블록단위로읽고쓰는것도가능하고, 문자단위로읽고쓰는것도가능 솔라리스의경우 디스크의블록장치특수파일명과문자장치특수파일명을같은이름을쓰고대신디렉토리를구분해저장 c0t0d0s0 로같더라도 /dev/dsk 디렉토리에위치한것은블록장치를가리키고, /dev/rdsk 디렉토리에위치한것은문자장치를가리킴 rdsk 에서 r 은 raw 의약자로문자장치를의미 28
블록장치 입출력장치관리 [3/3] telnet hanbitbook.co.kr $ ls -ld /dev/dsk 총 0 0 brw-r----- 1 root sys 32, 24 2002 년 12 월 26 일 c0t0d0s0 0 brw-r----- 1 root sys 32, 25 2002 년 12 월 26 일 c0t0d0s1 0 brw-r----- 1 root sys 32, 26 2002 년 12 월 26 일 c0t0d0s2... telnet hanbitbook.co.kr $ ls -ld /dev/rdsk 총 0 0 crw-r----- 1 root sys 32, 24 2002년 12월 26일 c0t0d0s0 0 crw-r----- 1 root sys 32, 25 2002년 12월 26일 c0t0d0s1 0 crw-r----- 1 root sys 32, 26 2002년 12월 26일 c0t0d0s2... 문자장치 29