이화여자대학교 컴퓨터공학과 반효경 교수님의 "운영체제 (KOCW)" 강의를 필기한 내용입니다.

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

운영체제 핵심

Screen Shot 2022-07-10 at 8.05.05 PM.png

  • 운영체제의 핵심은 컴퓨터의 하드웨어 바로 위에 설치되어 아래로는 하드웨어 자원을 관리하고 위로는 사용자 혹은 사용자 애플리케이션을 위한 편의 기능을 제공하는 것이다.
    • 그래서 그 편의기능이 뭐냐
    • 사용자로 하여금 내가 실행시킨 프로그램만 실행되고 있게 느끼도록 해주고
    • 하드웨어를 제어하는 복잡한 작업을 대행하기 때문에 하드웨어에 대한 부분은 사용자가 고려하지 않아도 되게끔 해준다.
  • 자원 분배를 할때는 분배의 형평성과 효율성 (주어진 자원 내에서의 최고의 성능) 이 Trade-off 관계에 있게 되는데 운영체제는 이 둘을 적절하게 타협해서 분배를 한댄다
    • 뭐 예를들면 CPU 스케줄링할때 중요한 프로세스에다만 몰빵하면 중요하지 않은 프로세스는 CPU할당을 받지 못하게 되는 이러한 Trade-off

운영체제, 커널

  • 커널은 운영체제의 핵심적인 부분으로 메모리에 항상 상주한다.
  • 따라서 좁은 의미의 운영체제는 커널만을 칭하고 (협의의 운영체제) 넓은의미에서는 커널 뿐 아니라 주변의 다른 시스템 유틸리티까지 포함한다 (광의의 운영체제).

운영체제의 분류

동시 작업 가능 여부

  • Single tasking: 한번에 하나의 작업만 처리
    • 일례로 MS-DOS 의 경우에는 한번에 하나의 작업만 처리할 수 있어 명령을 끝내기 전에 다른 명령을 실행시킬 수 없다
  • Multi tasking: 한번에 여러개의 작업 처리

사용자의 수

  • Single user: 머신을 한 번에 한 명의 사용자만 사용할 수 있는 운영체제
  • Multi user: 머신을 한번에 여러명의 사용자가 (원격) 접속하여 사용할 수 있는 운영체제
    • 따라서 Multi user 를 위해서는 사용자 간의 격리를 위한 보안성이나 자원 할당 등의 부가적인 기능이 필요하다.

작업 처리 형태

  • Batch processing: 이건 작업을 바로 처리하는 것이 아니라 일정량 모아서 한번에 처리하는 형태
    • 따라서 작업을 요청하면 다른 작업이 일정량 모인 후에 실행되고 결과가 나올때 까지 기다려야 했다.
    • 지금은 거의 안쓰고 옛날 Punch card 같은 처리 시스템에서 많이 쓰였음
  • Time sharing: CPU time을 잘게 쪼개 여러 프로세스를 돌아가며 실행시키는 형태
    • 뭐 지금의 운영체제가 다 그렇지 뭐
    • 다만 이건 시간상의 제약이 있지는 않다 → 시간을 쪼개 작업을 처리하지만 해당 시간 내에 끝내는 것을 목표로 하지는 않음
  • Real time: 작업의 deadline이 있어 해당 deadline 전까지 작업을 끝마치도록 하는 형태
    • 시간이 중요한 시스템들 (뭐 원자력 제어 시스템이나 미사일 등) 을 위한 시스템
    • 시간 내에 끝나지 않았을때 진짜 ㅈ되는 것을 위한 것이 Hard realtime system 이고
    • 시간 내에 끝내야 하긴 하지만 ㅈ되지는 않는것 (뭐 동영상 스트리밍의 경우에는 1초에 24프레임을 불러와야 하니까) 을 위한 게 Soft realtime system 이라고 부르더라

Multi-어쩌고

  • 프로세스를 병렬적으로 처리하는데에는 다음과같은 용어들이 있는데 어느정도는 구분할 수 있어야 한다
    • Multitasking: 가장 범용적인 (범위가 큰) 용어 → 걍 프로세스가 여러개 작동될 수 있어 하나가 끝나기 전에 다른 하나가 실행될 수 있는 것
    • Multiprogramming: 프로세스 여러개가 하나의 메모리에 적재될 수 있는 것
      • 뭐 당연히 Multitasking 을 위해서는 Multiprogramming 이 되어야 하고 어느정도는 Multitasking과 의미가 겹치지만 얘는 약간 메모리 측면을 강조한 용어라고 할 수 있다.
    • Time sharing: 프로세스 여러개가 CPU time을 돌아가며 할당받는 것
      • 이것도 Multitasking 과 개념이 좀 겹치지만 얘는 CPU time을 강조한 용어라고 할 수 있다
    • Multiprocess: 얘는 진짜 Multitasking과 차이가 없는거같은데
    • Multiprocessor: 얘는 CPU가 여러개 달린 하드웨어적인 용어이다
      • 일반적으로 Multitasking 이라 할때는 싱글프로세서를 의미한다.

운영체제의 구조

Screen Shot 2022-07-10 at 9.54.09 PM.png

  • CPU 스케줄링: CPU time 을 언제 누구에게 줄까?
    • 선입선출? 가장 빨리 끝나는 놈부터?
  • 메모리 관리: 메모리를 어떤 방식 프로세스들에게 할당해줄까?
    • 메모리를 어떻게 쪼개서 프로세스에게 할당할까?
    • 만일 메모리가 부족한 경우에 누군가를 디스크로 내보내야 한다면 누구를 내보낼까?
  • 파일 관리: 파일들을 디스크에 어떻게 저장해서 어떻게 읽을까?
    • 하나의 덩어리로 저장? 잘라서 저장?
    • 읽을때는 들어온 요청의 순서대로? 아니면 디스크 헤드랑 가장 자까이 있는 놈부터?
  • 입출력 관리: 속도도 느리고 제각각인 입출력장치랑 어떻게 상호작용할까?
    • Interrupt 방식을 사용 → I/O 작업을 CPU가 계속 신경쓰는 게 아닌 작업이 끝났을 때 인터럽트를 걸어서 그때서야 CPU가 신경쓰도록 하는 방식