제11장 UNIX의 내부

Download Report

Transcript 제11장 UNIX의 내부

UNIX
제11장 UNIX의 내부
Div. of Commputer & Communications Eng.
[email protected]
UNIX
11.1 소개
 Kernel
Continue...
Basics
– System Call, Interrupt
 File
System
– Directory Hierarchy, 정규 화일,
다중 화일 시스템, 주변장치
 Process
Management
– CPU와 RAM Memory를 프로세스들이 공유
하는 방법, Signals
11. 유닉스의 내부
2
UNIX
11.1 소개
 Input/Output
– 프로세스가 화일에 접근하는 방법
(특히, 터미날 입출력)
 Interprocess
Communication(IPC)
– 프로세스 간의 통신
11. 유닉스의 내부
3
UNIX
11.2 커널의 기본
 Kernel이
하는 일
– 경쟁하는 프로세스 사이에 CPU와 RAM
Memory를 공유하도록 해줌
– 모든 system call을 처리해줌

사용자가 프로세스를 통해 kernel을 접근하는 방
법
– 주변 장치들을 다룸
11. 유닉스의 내부
4
UNIX
11.2 커널의 기본
 Kernel
Subsystem
– CPU+RAM - 메모리 관리 - 프로세스 관리
- 프로세스간 상호통신(IPC)
– 주변 장치들 - 입력/출력 - 화일 관리
11. 유닉스의 내부
5
UNIX
11.2 커널의 기본

Process와 File
– Unix Kernel에서 지원하는 2가지 기본 개념
 Process : life-forms
(컴퓨터에서 생활하고, 의사결정을 수행함)
 File
- 프로세스의 일기와 쓰기를 위한 정보를 포함함
 IPC
- Signal, Pipe, Socket등 프로세스들간의 대화 방법
11. 유닉스의 내부
6
UNIX
11.2 커널의 기본
 System Call과 Hardware
– Kernel 접근 방법
Continue...
Interrupt
 System Call
프로세스(사용자)가 커널을 접근하는 방법
- 유닉스 커널 내부에 거주하는 서브루틴
- 기본 가능
화일열기(open) 화일닫기(close) 입출력 수행(read/wirte)
시그널 전송(kill) 파이프생성(pipe) 소켓 생성(socket)
프로세스 복제(fork) 프로세스 겹치기(exec)
프로세스 종료(exit)
11. 유닉스의 내부
7
UNIX
11.2 커널의 기본
 Hardware Interrupt
외부장치(특수화일)이 커널을 접근하는 방법
- 인터럽트 우선순위가 주어짐
Hardware Error(0) > clock(1) > disk I/O(2) > keyboard(3) > trap(4)
- 인터럽트 발생시 현재의 프로세스는 일시 정지되고, 인
터럽트 벡터표를 참조하여 인터럽트가 처리됨
- 인터럽트의 인터럽트가 발생 가능
- 인터럽트 수행 중 우선순위가 낮은 인터럽트는 무시됨
11. 유닉스의 내부
8
UNIX
11.2 커널의 기본
 사용자
Continue...
모드와 커널 모드
– 사용자 모드 : 사용자 프로세스가 실행될 때
– 커널 모드 : 커널 자료구조에 접근할 수 있을 때
- process table
시스템에 있는 모든 프로세스마다 하나의 엔트리 가짐
- open file table
시스템 내에 모든 열려 있는 파일마다 하나의 엔트리를 가짐
11. 유닉스의 내부
9
UNIX
11.2 커널의 기본
System Call

사용자 모드에서 커널 모드로 들어가기 위한 유일한 방법
단계 1) 사용자 코드(C 프로그램)에서 원하는
system call 명시 (사용자 모드)
단계 2) 명시된 system call에 해당하는 runtime C library 수행
단계 3) trap 명령을 실행하여 모드 전환 (커널 모드)
단계 4) system call vector table내의 해당 entry 참조
단계 5) kernel system call code를 수행
단계 6) 커널 자료구조 조작 후 사용자 모드로 전환
단계 7) system call의 결과 반환하며 사용자 코드로 복귀
(사용자 모드)
11. 유닉스의 내부
10
UNIX
11.3 파일 시스템

Unix File은 byte의 선형적인 연속이다.
(record 등의 개념 없음) (예) lseek()
11. 유닉스의 내부
11
UNIX
11.3 파일 시스템
 Unix
File의 세 가지 종료
– 정규 화일(regular file)
 데이터와 코드와 관련된 일련의 byte들을 포함 기
본적인 입출력 시스템 호출을 통해 참조됨
– 디렉토리 화일(directory file)
 화일 시스템의 중추 디렉토리 명시적 화일 시스템
호출을 통해 참조됨
– 특수 화일(special file)
 주변장치(프린터, 디스크)나 IPC 메카니즘(pipe,
socket) 표준 입출력 시스템 호출을 통해 참조됨
11. 유닉스의 내부
12
UNIX
11.3 파일 시스템
 Disk
구조
– 용어
 track  sector  block  disk arm
 platter  cylinder latency  delay
 interleave factor  fragmentation
– unix의 입출력은 항상 블록 입출력을 사용함
11. 유닉스의 내부
13
UNIX
11.3 파일 시스템
Continue...
 Inode
– Inode(Index Node) : 각 화일에 대한 정보 보관,
120bytes, 모든 inode는 유일한 번호가짐, 모든
화일은 정확히 한 개씩 소유, inode list (모든
inode들이 모인 곳)
– Inode의 정보 (ls -l로 볼 수 있다) 화일이름은
inode가 아닌 디렉토리 블록에 저장됨
11. 유닉스의 내부
14
UNIX
11.3 파일 시스템
 화일의 유형: 정규화일, 디렉토리화일, 특수화일
(블록특수, 문자특수)
 화일의 허가권(permission)
 소유권과 그룹 ID
 하드 링크 계수
 마지막 수정과 접근 시간
 디스크 블록의 위치
(정규화일 및 디렉토리 화일의 경우)
 주변 보조장치 번호(특수화일의 경우)
 만약 심볼릭 링크라면, 심볼릭 링크의 값
11. 유닉스의 내부
15
UNIX
11.3 파일 시스템
 Block
Map
– 화일을 구성하는 block들의 위치 지정 방식
1 block = 4 kbytes
direct block pointer
- 처음 10개 block의 위치 지정, inode 내에 직접 저장
 indiret block pointer
- 다음의 1024개(즉, 4 Mbytes)까지의 block의 위치 지정
 double indirect block pointer
- 위 를 1000개까지 허용
11. 유닉스의 내부
16
UNIX
c
Continue...
 File System
– boot block


구조
첫 번째 논리적 블록(#0)
unix가 활성화될 때 사용되는 약간의 실행 코드 포함
– super bolck
 두 번째 논리적 블록(#1), 전체 화일 시스템에 관한 정
보 보관, bitmap포함(각 free block의 사용여부를 1과
0으로 표시) 포함되는 정보들
 화일시스템내의 총 블록 수  free block bitmap
 inode free list내의 inode 수  block size(byte)
 free block의 수
사용중인 블록의 수
11. 유닉스의 내부
17
UNIX
11.3 파일 시스템
– inode list
 한 블록 당 40개의 inode가 포함됨
– user block (free block)
- inode 1번은, 손상된 블록(worst nightmare 화일)에
대한 위치를 가리킴
- inode 2번은, root directory가 포함된 블록의 위치를
가리킴
- 디렉토리가 만들어질 때, 자신(.)과 부모(..) 디렉토
리는 자동으로 만들어짐
- hard link : 유닉스 디렉토리 내의 항목으로,
<화일 이름, inode 번호>로 구성됨
11. 유닉스의 내부
18
UNIX
11.3 파일 시스템
 path
name을 inode로 전환하기
 current inode 결정: 절대경로이면 inode 2번
(root), 상대경로이면 현재의 작업디렉토리
 경로 이름의 구성요소를 왼쪽에서 오른쪽 으
로 처리하면서 이동
 current inode가 symbolic link이면, 이것으로
대치한 후 경로 이름을 재처리
 마지막 경로 이름 구성 요소의 inode가, 참조
되는 화일의 inode임
(예) /usr/test.c 찾기
11. 유닉스의 내부
19
UNIX
11.3 파일 시스템
 mount/umount
11. 유닉스의 내부
20
UNIX
11. 4 프로세스 관리
 Scheduler와
Memory Manager
– Scheduler
 경쟁하는 프로세스들 사이에 CPU를 할당하는 커널
부분
– Memory Manager
 경쟁하는 프로세스들 사이에 RAM을 할당하는 커널
부분
11. 유닉스의 내부
21
UNIX
11. 4 프로세스 관리
 Executable
File(실행화일)의 구조
– magic number를 포함하는 main header
(예) 처음 두 바이트가 #!이면 shell script이므로, 텍스
트를 실행하도록 함
– section1의 header
– section2의 header
– section1(기계코드)
– section2(데이타)
11. 유닉스의 내부
22
UNIX
11. 4 프로세스 관리
 Unix
상에서의 프로그램 실행 과정
– 기존의 프로세스를 복사하여 자식 프로세스 생성
– 실행할 프로그램을 자식 프로세스와 연관시킴
11. 유닉스의 내부
23
UNIX
11. 4 프로세스 관리
 Unix의
Continue...
초기 프로세스들
 swapper (PID = 0) boot 시간 동안 생성됨,
두 번의 fork/exec를 실행하여 , 만듦
 init (PID = 1)
 pagedeamon (PID = 2)
11. 유닉스의 내부
24
UNIX
11. 4 프로세스 관리
모든 프로세스는 init 프로세스의 자손들임
swapper(PID=0)와 pagedeamon(PID=2)을
커널 프로세스라고 부름, 대부분의 프로세스
는 사용자 모드에서 실행되지만, 이들은 커널
모드에서만 실행되며 별도의 실행화일로 존
재 하지 않으며, 커널 내로 직접 링크됨
11. 유닉스의 내부
25
UNIX
11. 4 프로세스 관리
 프로세스의
Continue...
계층구조
– fork()
 프로세스를 복사함, 부모 프로세스에게는 자식 프로
세스의 PID를 반환하며, 자식 프로세스에게는 0을 반
환한다. 만일 자식 프로세스를 만드는데 실패하면 부
모 프로세스에게 -1을 반환함
– exec()
 PID, PPID의 번호는 동일하지만, 프로세스가 실행하
는 코드와 자료, 스택만이 다른 것으로 교환됨
11. 유닉스의 내부
26
UNIX
11. 4 프로세스 관리
– 모든 프로세스는 init 프로세스의 자손들인데,
fork()와 exec()를 통하여 "계층적으로” 생성
소멸됨
11. 유닉스의 내부
27
UNIX
11. 4 프로세스 관리
 프로세스의
6상태
 Runing

현재 CPU를 사용 중
 Runnable

언제든지 CPU를 사용할 준비가 되어있음
 Sleeping

어떤 사건이 발생하기를 기다리고 있음
11. 유닉스의 내부
28
UNIX
11. 4 프로세스 관리
 Suspended

SIGSTOP과 같은 시그널이 의해 frozen됨.
SIGCONT에 의해 재개됨
 Idle

fork()에 의하여 생성은 되었으나, 아직 실행할 수는
없음
Zombified

종결되었으나 그 결과(종결코드)를 아직 부모에게
반환하지 못함
– 6상태의 전이표
11. 유닉스의 내부
29
UNIX
11. 4 프로세스 관리
 프로세스의
다섯가지 구성요소
 code area
 user area



 data area
 stack area
프로세스에 대한 관리(housekeeping) 정보 보관함
단지 커널에 의해서만 접근됨
내용
– 각 종류의 SIGNAL에 어떻게 반응해야 하는가 / 열린 화
일 기술자들에 대한 기록 / 최근에 CPU를 사용한 시간
 page table

메모리 관리 시스템에 의하여 사용됨
11. 유닉스의 내부
30
UNIX
11. 4 프로세스 관리
 Process
Table : 커널 자료 중의 하나
 PID와 PPID
 UID(user)와 GID(group)
 프로세스의 상태
 code, dats, stack, user area의 위치
 모든 대기 중인 SIGNAL의 목록
(예)그림11.26에 대한 프로세스 테이블의 사례
11. 유닉스의 내부
31
UNIX
11. 4 프로세스 관리
Continue...
 Scheduler
– 몇가지 용어들
– multi-level priority queue라는 자료구조 관리

비슷한 우선순위 가진 프로세스들의 linked list
– time quantum
 1/10초 , 프로세스에 할당되는 CPU 시간 단위
– context switching
 한 프로세스에서 다른 프로세스로 전환하는 것. 프로
세스의 동결(freeze)과 해동(thaw)이 일어남
– hardware clock interrupt
 1/100초마다 일어나는데 각각을 clock tick이라 부름
11. 유닉스의 내부
32
UNIX
11. 4 프로세스 관리
Continue...
☞ Scheduling Rules Round-Robin 방식
 매 1초 마다, 모든 runnable 프로세스들의 우
선순위를 계산하여 큐에 편성한다
프로세스의 우선순위 계산법
 우선순위 = 상수1 / (최근 CPU 사용량) + 상수2 /
(nice 설정치)
 CPU를 가장 많이 사용한 프로세스는 우선 순위가
낮아지며, nice의 수치가 높을수록 우선순위가 낮아
진다.

11. 유닉스의 내부
33
UNIX
11. 4 프로세스 관리
Continue...
 매 1/10초 마다, 우선순위가 제일 높은 프로세
스에 CPU를 할당하여 실행시킴



주어진 time quantum내에 수행이 끝나지 않으면, 큐
의 맨 마지막에 놓임
만일 수행 도중 sleeping하면, 즉시 다른 프로세스에
CPU를 할당
시스템 호출로부터 반환되고, 더 높은 우선순위의 프
로세스가 수행을 준비하고 있다면 이것에 의하여 우
선순위가 낮은 현 프로세스는 선점되어 큐의 뒤에 놓
임
11. 유닉스의 내부
34
UNIX
11. 4 프로세스 관리
 매 1/100초(clock tick)마다, 현 프로세스의
clock tick 계수를 1씩 증가시킴

4개의 clock tick이 모이면, 현 프로세스의 우선순위
를 재계산(우선순위 감소화)
11. 유닉스의 내부
35
UNIX
11. 4 프로세스 관리
 메모리
Continue...
관리
– RAM보다 큰 프로세스를 수행하기 위한 기법
(페이지 단위로 분할)
– 1 memory page = 4 Kbytes
– region(구역)

연속적인 논리적 주소공간의 각 영역 (코드 영역, 자
료 영역, 스택 영역)
11. 유닉스의 내부
36
UNIX
11. 4 프로세스 관리
– page table
 모든 구역에 해당하는 각각의 페이지가 연속적으로
저장되지 않으므로 이 페이지들의 위치를 기록하는
표. 커널의 자료영역에서 생기고, 단지 커널에 의하
여 접근됨
(예) 사용자 영역, 구역 및 페이지 테이블
– RAM Table

프로세스가 현재 RAM을 필요로 하는 경우 RAM 할
당 후 이에 기록함 "locked" page
- 결코 디스크로 쫓겨 나지 않음 (예) Unix Kernel
11. 유닉스의 내부
37
UNIX
11. 4 프로세스 관리
 실행
화일 적재: exec()
– 프로세스가 exec()를 수행하면, 커널은 프로
세스의 code, data, stack region에 대한
page table을 할당함, code region에 대한
inode 및 header 정보에 의거하여, 디스크
상의 저장 위치를 파악(uninitialized data,
stack은 디스크에 없음)
– 이 중 하나를 접근할 때, 디스크로부터 RAM
으로 복사되고, 주소를 변환
(예) exec() 직후의 메모리 배치
11. 유닉스의 내부
38
UNIX
11. 4 프로세스 관리
 MMU(메모리
Continue...
관리자)
– 논리 주소를 물리 주소로 변환하는 하드웨어 장치
– 몇가지 용어들
 page fault  modified bit
 low-water mark

 referenced bit
현재 사용하지는 않으나 자유 상태인 페이지의 최소수
 page stealer(pagedeamon)

low-water mark이하가 되면 자유 페이지를 확보 하기
위하여 MMU가 깨우는 프로세스. 추후 다시 잠이 듬
11. 유닉스의 내부
39
UNIX
11. 4 프로세스 관리
 swap space

page stealer가 자신의 역할을 위하여 디스크에
확보한 공간 page out용으로 사용(least recently
used), swap map을 가짐
(예) 몇 Page out이후의 메모리 배치


page in은, page fault 발생시 이루어짐
page out 되었으면서도, 이후에 수정된 적이 없
으면, free page가 됨
– MMU algorithm
– 실행화일 수행시의 메모리 배치 현황
11. 유닉스의 내부
40
UNIX
11. 4 프로세스 관리
 프로세스
복사
– fork()
– 자식 프로세스가 부모 프로세스를 복사 하지
만, 효율성을 위해 페이지 공유 기법
(reference counter 이용)을 사용
11. 유닉스의 내부
41
UNIX
11. 4 프로세스 관리
 thrashing과
swapping
– thrashing
 많은 수의 프로세스가 존재하여 page-out/in이 지나치
게 일어나서 페이지를 전송하는데 많은 시간을 소모
하는 상황을 일컬음(성능약화 초래)
– 대책
 thrashing 발견시 swapper를 깨워, 우선순위와 메모리
사용도를 기반으로하여 프로세스를 선정하여 그들의
모든 RAM 페이지를 page out시킴, thrashing이 없어
질 때까지 이를 계속한 후, 다시금 수행을 회복, 이후
에는 page fault에 의하여 RAM으로 적재
11. 유닉스의 내부
42
UNIX
11. 4 프로세스 관리
 프로세스
종결
– exit()
– 종료 코드는 process table 항목 내에 위치
– 프로세스의 file descriptor들이 닫힘
– 프로세스의 region의 reference counter가 감소
– reference counter가 0인 모든 RAM과 swap
page들은 할당이 해체
11. 유닉스의 내부
43
UNIX
11. 4 프로세스 관리
 프로세스의
시스널 처리
– 시그널 처리와 관련하여 각 프로세스가 보관
하는 3가지 정보
 signal handler array

특정 시그널을 받을 때 무엇을 할 것인가
 pending signal bitmap

특정 시그널이 도착했는지의 여부 표시
 시그널을 구분할 때 사용하는 proces group id

fork된 프로세스는 자신의 부모 프로세스의 모든
signal handler array를 상속
11. 유닉스의 내부
44
UNIX
11.5 입출력
 입출력
객체 계층 구조
– Unix 화일의 구분 방법
– 입출력 객체
- 정규 화일
- 디렉토리 화일
- 특수 파일 - 소켓
- 파이프 - 명명된/명명되지 않은 파이프
- 주변장치 - 버퍼되는/버퍼되지 않는 주변장치
11. 유닉스의 내부
45
UNIX
11.5 입출력
 입출력
Continue...
버퍼링(buffering)
– buffer pool
 커널이 입출력을 버퍼링하기 위하여 사용하는 시
스템 자료 구조, 어떤 프로세스가 입출력 시스템
호출로 buffer pool을 사용 중이면, lock됨
– 화일이 닫힐 때, 화일의 수정된 버퍼화된 모
든 블록을 디스크로 복사되는 것이 아니라
delayed-write 기법에 의하여, 해당 블록이 다
른 화일에 의하여 대치될 때 복사됨
11. 유닉스의 내부
46
UNIX
11.5 입출력
– sync()
 모든 delayed-write buffer를 디스크에 복사하도록
한다 "sync"
– 화일 공유 방법들
 두 번 이상 열리는 경우 : active inode table 공유
 file descriptor가 복사되는 경우
dup(), dup2(), fctnl() open file table 공유
 프로세스가 복사되는 경우 : fork()
– link()와 unlink()
– mount()와 umount()
11. 유닉스의 내부
47
UNIX
11.5 입출력
 특수
화일 입출력 인터페이스
 블록 지향적: buffering
 문자 지향적(raw interface): no buffering
– 보통의 주변장치는 두 가지 인터페이스를 갖으
나, 함께 사용하는 것은 바람직 하지 않음
11. 유닉스의 내부
48
UNIX
11.5 입출력
 switch
table
– 모든 주변장치의 드라이브 함수들의 진입점
들을 지정
 ioctl()
– 장치의 특성을 제어함
11. 유닉스의 내부
49
UNIX
11.5 입출력
 터미날의
3가지 line disciple
 raw mode : 제어 문자 해석 없이 순수하게 문
자 입력
 cbreak mode : 몇 개의 제어문자만을 해석해
줌(^S, ^Q, ^C)
 cooked mode(canonical mode) : 특수 문자의
해석을 완전히 처리해 줌
11. 유닉스의 내부
50
UNIX
11.5 입출력
 터미날
자료 구조
 clist
 raw input list, cooked input lst, output list
 tty structure
11. 유닉스의 내부
51
UNIX
11.6 프로세스간의 상호통신
 IPC
 Pipe의
구현
– System V
 명명되지않은 파이프(pipe()로 만듦), 명명된 파이프
(mknod()로 만듦), 파이프 자료구조는 "화일 시스템"
에 저장됨, 2개의 file descriptor, 2개의 open file
entry가짐
– BSD
 "socket"에 의하여 구현됨
11. 유닉스의 내부
52