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이 생겼다.
출처: 운영체제개념 발췌
댓글 없음:
댓글 쓰기