서울대학교 컴퓨터공학과 김진수 교수님의 "고급 운영체제" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

Monolithic kernel, Microkernel

  • Monolithic kernel <-> Microkernel
    • Monolithic 은 한덩이의 큰 커널
    • Microkernel 은 진짜 중요한 것만 남기고 나머지는 전부 userspace 에서 돌리는
      • 이렇게 하면 (Kernel 의 크기가 작기 때문에) Kernel panic 의 가능성이 적다.
      • 하지만 요즘은 유행이 좀 시들하댄다
        • Userspace 에서 돌리더라도 결국에는 Kernel function call 이 필요한데 monolithic 에서는 그냥 하나의 function call 이면 될 것을 microkernel 에서는 동일한 기능이라 할 지라도 Userspace 를 거쳐서 Kernel function call 이 이루어지니까

Views of OS

  • Process management: CPU 의 abstraction
    • Scheduler, IPC, Sync 등
  • Memory management: MEM 의 abstraction
    • Virtual memory, page caching, swap 등
  • 나머지는 전부 IO 인데..
    • 그중 FS Management 는 무조건 있어야 하는 거니까
    • 이외의 IO management (Device driver)
    • HW Control (interrupt 등)

Application 관점에서의 OS

  • OS 는 결국에는 Computer System 에 대한 Abstract 이다
    • Process, Thread 로 CPU 를 추상화해서 사용할 수 있도록 하고
    • Virtual memory 로 MEM 을 추상화해서 사용할 수 있도록 하는 등

System 관점에서의 OS

  • 한정된 자원의:
    • 공유
    • (공유하면서 동시에) 보호
    • (공유함에 있어서) 형평성
    • 효율성
  • 를 관리해주는 소프트웨어인 것.

Implementation view

  • OS 는 highly-concurrent, event-driven SW 이다
    • syscall 만 생각해도 event-driven 이라는 것이 딱 감이 올 것이다
    • Event 는 syscall 과 interruptions 로 구분지을수 있다
      • syscall 은 userspace 에서 오는 event
      • interrupt 는 hw 에서 오는 event
    • Highly-concurrent 라는 것은 이러한 event 들이 nested 되기도 하며 수도 없이 쏟아지기 때문이다

여기부터는 2024-03-14 강의

  • syscall 이나 interrupt 가 겹칠때 어떻게 되냐
    • syscall 수행중에 syscall 이 오는 경우
      • 일단 single core 에서는 발생하지 않는다: 이미 kernel space 로 진입해 handler 가 불리고 있으므로
      • multi core 에서는 가능하다: 다른 코어에서 user space 로 실행되다가 걔가 syscall 을 호출할 수 있기 때문
    • syscall 수행중에 interrupt 가 오는 경우
      • 당연히 single, multi core 모두 가능하다: interrpt 는 hw 에서 오는 것이기 때문
    • interrupt 수행중에 syscall 이 오는 경우
      • multicore 는 가능하고 singlecore 은 불가능하다: 마찬가지로 kernel space 로 실행중이었으니까
    • interrupt 수행중에 interrupt 가 오는 경우
      • 당연히 둘다 된다: hw-driven event 이기 때문
  • Big kernel lock: 옛날에는 multi-core 에서 syscall 처리중에는 또 다른 syscall 이 오는 경우를 막기 위해 이렇게 kernel level lock 을 걸어버리는 괴상한 짓을 했다고 한다. (Giant lock)