2008년 4월 16일 수요일

운영체제 구조

 


1. 커널

메모리에 항상 상주하며 process가 요청하는 일을 빠르게 처리해준다.

private같은 존재로 system call등의 member function을 통해 접근한다.


가. 커널의 기능

1) process(thread) management

2) processor management(scheduling)

3) memory management: process의 공간(text, data, stack, heap)할당 및 회수 (동적메모리도 관리한다)

4) device driver(interrupt handling): power fault > clock interrupt > I/O device

5) IPC: local 및 network와 distributed까지

6) file system

7) system 보안 및 보호


나. 커널의 종류

Monolithic kernel: 한 덩어리 커널. 커널안에서 할 일이 매우 많다.

1) 장점: 시스템 호출에 의한 서비스가 빠르다.

2) 단점: 운영체제 기능 변경 시(device driver 추가 등) 커널 컴파일이 필요. 이식성이 떨어짐.

Micro kernel: 커널에서 아주 필수적인 요소만 뽑아 크기를 줄여 만든 것

1) network, 다양한 IPC, file system, interrupt가 빠졌다. (매우 기본적인 것만 제공) 필요하다면 process로 만들어서 사용할 수 있다.

2) 장점: 다양하게 사용가능(확장성, 재구성 용이), 임베디드 시스템에 많이 사용, size가 작다, 메시지 전달만을 한다.

3) 단점: process가 많아지면 단지 function을 호출하는 monolithic커널과 달리 메시지 전달이 많아지므로 느리다.



2. 프로세스

현재 실행되고 있는 프로그램을 말한다.

각 프로세스는 상태와 context를 가진다.


가. 프로세스의 상태

1) Ready: CPU를 할당받기를 기다리고 있는 상태, 언제든 수행될 준비가 되어있다.

2) Blocked: request 혹은 원하는 event가 끝날 때까지 기다리고 있는 상태.

3) Running: CPU를 할당받아 현재 수행되고 있는 상태.

4) 상태전이: ready상태에 있던 프로세스가 scheduling을 받으면 cpu를 할당받아 수행하며 running상태로 바뀐다. running상태의 프로세스는 time slice를 모두 소진하면 ready상태로 다시 넘어가며, 수행 중에 I/O 요청이 들어오거나 어떤 event나 메시지를 기다려야 한다면 cpu를 넘기고 blocked상태로 간다. blocked상태에 있는 프로세스는 I/O작업이 끝나거나 기다리던 event가 발생하면 ready상태로 가서 다시 scheduling받기를 기다린다.


나. 프로세스 관리: 모든 프로세스는 PCB를 가지고 있다. (pid, uid, file info, priority, state, memory info, context 등을 저장하고 있음)


다. 프로세스 문맥(context)

1) user-level: text, data, stack영역

2) system-level: PC를 포함한 각종 register, resource사용정보, process관리정보

3) context switch

- CPU를 할당받거나 반납할 때, CPU가 다른 프로세스에게 할당되게 되는데, 이전에 수행시키던 프로세스의 context를 보존하고 새로 실행될 프로세스의 context를 활성화 시키는 것.

- 이전에 context_switch가 일어났던 곳에서 재개된다.

☆ Process는 kernel에서 죽고 kernel에서 살아난다. ☆


라. 프로세스 관리: ready queue와 block queue 안에서 관리된다.



3. 인터럽트 처리(interrupt handler)

가. Disk Interrupt Handler

1) 주요기능: 입출력이 완료된 프로세스를 ready상태로 만들어 ready queue로 옮기고 다음 입출력 요청을 수행하도록 시킨다.

2) handling과정: 이전에 수행 중이던 프로세스의 문맥을 저장하고 interrupt mask를 세팅한 후, I/O queue의 맨 첫 번째에 들어있는 block을 꺼내고, blocked queue에 들어있는 PCB를 가져와서 ready상태로 바꾸어주고 ready queue에 넣는다. 만약에 I/O queue에 요청이 남았다면 입출력을 시킨다.


나. Clock Interrupt Handler

1) 주요기능: 시간에 관련된 서비스 제공, 주기적인 system의 일, time slice 업데이트, system 시간 유지

2) handling과정: system time을 업데이트하고 timeout함수를 호출하고, 깨워줄 process가 있다면 그 process를 깨워준다. time slice가 다 되었다면 scheduling flag를 세팅해두고 후에 interrupt handling을 끝내고 빠져나올 때 flag를 검사해서 scheduling이 필요하다면 context_switch를 호출한다.


☆ Interrupt Handling 도중에는context_switch는 없다 ☆

→ kernel mode에서는 time slice에 의해 수행이 중단되지 않으며 스스로 cpu를 반납하기 전에는 context_switch가 없다. 그러나 real time process가 생길수도 있으므로 2.6버전부터 preemptible kernel이 생겼다.



출처: 운영체제개념 발췌

댓글 없음:

댓글 쓰기