컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 SW와 HW를 연결하는 소프트웨어 계층
운영체제의 목적
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
- 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공
- 컴퓨터 시스템의 한정된 자원을 효율적으로 관리
- CPU. 메모리, I/O 장치 등의 효율적 관리
- 실행 중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당, 실행 중인 프로그램들에 메모리 공간을 적절히 분배
주어진 자원으로 최대한의 성능을 내도록 : 효율성
- 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록 :
형평성
- 사용자 및 운영체제 자신의 보호
컴퓨터 시스템의 구조
- 컴퓨터 내부에는 CPU와 메모리 등, 컴퓨터 외부에는 입출력 디바이스인 디스크, 키보드, 모니터 등으로 구성됨.
- 컴퓨터가 부팅되면 운영체제가 메모리에 올라가서 실행됨 → 컴퓨터가 종료되기 전까지 항상 실행되는 프로그램이
운영체제
- 운영체제에서 핵심은
커널
커널은 메모리에 늘 상주한다.(언제나 메모리에 올려있음)
- CPU의 작업 공간은
메모리
CPU는 매 클럭
마다 메모리에 존재하는 기계어를 하나씩 읽어 연산한다.
- 즉, CPU가 특정 메모리의 기계어를 읽고 있다면 해당 메모리에 올라와있는 프로그램을 실행하고 있는 것!
I/O 컨트롤러
- I/O 디바이스를 전담하는 일종의 작은 cpu :
I/O Controller
cpu가 I/0 컨트롤러에게 파일 요청
I/O는 파일을 읽고 cpu에게 알려주면 cpu는 메모리에 올라온 것으로 일 진행
운영체제의 기능
CPU 스케줄링
- CPU는 짧은 시간 간격으로 여러 프로그램에 할당되므로 어떤 프로그램에게 CPU 사용권을 줄지, 어느 만큼 할당할지 결정하는
CPU 스케줄링
이 중요하다
- 무한정 CPU를 사용하지 못 하게 어느 정도 시간이 지나면 사용권을 뺏음
운영체제는 HW 장치에 협조하여 스케줄링
메모리 관리
- 한정된 메모리를 어떻게 쪼개어 쓰는지 메모리 관리
디스크 스케줄링
- 디스크에 들어온 요청을 어떤 순서로 처리할지 관리
- CPU에 비해 디스크는 속도가 매우 느림
메모리는 CPU에 비해 느리지만 디스크에 비해 빠름
그리고 이 메모리와 디스크의 속도 차이를 메워주는 것이 필요
- 메모리에 올라온 프로그램이 CPU를 번갈아 사용하듯이, I/O 장치도 CPU를 번갈아 사용할 수 있음 → 순서 결정 (스케줄링)
인터럽트, 캐싱
- 빠른 CPU와 느린 I/O 장치 간 속도차이를 극복
- 똑같은 데이터를 또 요청했을 때
캐싱
기능으로 속도 극복
- I/O 컨트롤러에게 I/O 관련된 일을 시키고 CPU는 당장 작업할 수 있는 것을 찾아서 작업
→ 컨트롤러가 작업 완료를 CPU에게 인터럽트
를 걸어서 알림
→ CPU는 기계어 하나가 실행이 끝나면 인터럽트를 체크함 (누군가가 작업 완료 했다고 알렸는지)
인터럽트가 발생하면 CPU는 무조건 운영체제로 넘어가고, 운영체제는 그 인터럽트 이후 작업을 실행할 수 있도록 CPU 스케줄링
즉, CPU는 느린 장치들에게 일을 시켜놓고 다른 일을 하는 동안 작업이 끝나면 인터럽트를 걸어 작업 완료를 알리고 CPU의 제어권이 인터럽트에 의해 자동으로 운영체제에게 넘어가서 인터럽트 이후의 일을 기계어를 통해 처리가 됨
프로세스의 상태
컴퓨터에서 실행되는 프로그램(interactive application, scientific application ...)

CPU가 하나밖에 없기 때문에, 매순간 실행되는 기계어가 존재
기계어 RUNNING 중
나머지 프로그램이 CPU를 사용하고 싶어서 기다리고 있는데, 운영체제는 CPU 큐
를 생성하여 사용하고자 하는 프로그램을 줄 세움
실행 중인 프로그램을 계속 CPU를 사용하게끔 하는 게 아니라, 짧은 시간동안 CPU를 사용하게끔 하고 다시 제어권을 뺏어 CPU 큐에 넣어 대기하도록 하고 다음 순서에 있는 프로그램을 실행하도록 하는 식..
- 디스크에서 발생하는 프로세스는
디스크 입출력 큐
에 줄 세워놓고, 키보드는 키보드 입력 큐
에 줄 서고.. 이런 식으로 프로세스가 CPU에 의해 실행되기를 대기
디스크 스케줄링에 의해 늦게 와도 효율성을 위해 먼저 처리가 되기도 하는 등 CPU 스케줄링
이 발생 ➡ 처리가 끝나면 I/O 컨트롤러는 CPU에 인터럽트
를 걸어 작업 완료를 알림 ➡ CPU가 운영체제로
넘어감 ➡ 운영체제는 디스크 입력 큐에서 해당 프로세스를 가져와 CPU 큐
에 넣어주는 작업을 함!
키보드를 눌렀을 때
사람이 키보드를 누르면 ➡ 키보드 컨트롤러가 CPU에게 인터럽트를 걸어서 키보드 입력이 들어왔음을 알림 ➡ CPU가 운영체제에 넘어가고 ➡ 운영체제는 키보드에서 넘어온 데이터를 사용할 수 있게 함
interactive app은 이런 입출력 장치 프로그램, cpu와 i/o를 번갈아 진행
scientific app은 cpu를 계속 오랫동안 사용하는 프로그램 (유전자 검사 계산 ...), cpu만 오래 사용하다가 i/o를 한 번 하고 이런 식으로 진행