운영체제의 개념과 역할, 구성요소, 핵심 알고리즘을 살펴본다.
OS
: 컴퓨터 HW위에 설치되어 사용자, 다른 SW, HW를 연결하는 소프트웨어 계층
: 컴퓨터 시스템의 자원을 효율적으로 관리하는데 목적을 둔다.
OS의 목적
(1) 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다
(1)-1 : 한 대의 컴퓨터에서 여러 프로그램을 동시에 돌릴 수 있는 환경 제공
(1)-2 : HW를 직접 다루는 복잡한 부분을 OS가 대행
(2) 컴퓨터 시스템 자원(CPU, 메모리, I/O장치)의 효율적 관리
: 실행 중인 프로그램에게 짧은 시간씩 CPU를 번갈아 할당 & 메모리 공간을 적절히 분배
: 하드웨어는 한정된 자원을 가지고 있으므로, OS는 이 자원들을 관리하는 것에 큰 목적을 둔다.
(2)-1 : 효율성 - 주어진 자원으로 최대한의 성능 내기
(2)-2 : 형평성 - 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록
(2)-3 : 사용자와 OS 자신의 보호
컴퓨터 시스템 구조
(1) 컴퓨터 내부 : CPU, 메모리
(2) 입출력 디바이스 (I/O) : 디스크, 키보드, 모니터 등
(1) CPU 스케줄링
: CPU는 짧은 시간 간격으로 계속 프로그램에게 할당되므로, CPU를 특정 프로그램이 무한정으로 쓰지 못하도록 CPU의 사용권을 관리한다. OS 단독이 아니라 HW와 함께 구현한다.
(2) 메모리 관리 : 한정된 메모리를 나누어 사용한다.
(3) 디스크 스케줄링 : 디스크에 들어온 요청의 처리 순서를 정한다. 순서대로 처리하는 것은 비효율적이기 때문에 필요.
(4) 인터럽트, 캐싱 : 빠른 CPU와 느린 I/O 장치간 속도차의 극복 목적.
(4)-1 캐싱 : 메모리와 디스크 사이의 속도 차이를 줄이기 위해 중간 단계를 두는 것. 메모리 어딘가에 보관했다가 같은 요청 들어왔을때 디스크까지 가지 않고 꺼내오는 식.
(4)-2 인터럽트 : CPU가 당장 일 할 수 있는 애를 찾을때 나 지금 일 할 수 있다고 알리는 역할. 인터럽트가 들어오면 CPU는 OS에게 넘어가 다음 업무에 할당된다.
※ 부팅 : OS가 메모리에 올라가서 컴퓨터 꺼지기 전까지 계속 실행된다.
※ 커널 : OS의 핵심적인 부분. 컴퓨터에서 언제나 올라가있다.
※ 디스크 스케줄링은 엘리베이터 스케줄링과 유사하다. 그때그때 효율적인 서비스를 구현하는 것이 목표.
여러 프로그램 중 누구에게 먼저 CPU 사용권을 줄 것인가?
메모리는 휘발성 매체이므로, 전원을 켜면 실행 파일들이 본인만의 메모리 공간인 가상메모리를 거쳐 실제 물리적 메모리에 올라가 프로세스가 된다.
가상 메모리가 가득 차서 쫓겨나면 당장 필요한 프로세스는 메모리에 올라가고, 그렇지 않다면 전원이 나가더라도 유지되는 스왑영역이라는 디스크로 빠져 저장된다.
5번 페이지 요청되면 뭐 하나는 쫓겨나야 한다! 이때 OS는 효율성을 고려해서 쫓아낼 친구를 정한다.
: 쫓겨나는 친구가 다음에 다시 호출되면 손해니까, 메모리 관리를 할때는 기본적으로 미래에 사용될 가능성이 낮은 페이지를 쫓아낸다.
: 미래 예측? - 지금까지의 내용을 기반으로 추측.
- LRU : 가장 오래 전에 참조한 페이지를 삭제한다. 최근에 사용한 페이지는 재사용성이 높고, 오래 전에 쓴 친구는 재사용성이 낮을 것이기 때문.
- LFU : 사용된 횟수를 기반으로, 참조 횟수가 제일 적은 페이지를 삭제한다.
CPU를 쓰고 나서 디스크에 요청이 들어오면 디스크 큐에 쌓인다.
디스크 접근 시간의 구성 (1 > 2 > 3으로 길다)
(1) 탐색 시간 (Seek time) : 디스크 헤드가 움직이는 시간.
(2) 회전 지연 (Rotational latency) : 헤드가 원하는 섹터에 도달하는 시간.
(3) 전송 시간 (Transfer time) : 실제 데이터 전송 시간
디스크 스케줄링의 목적
: 탐색 시간을 줄이자!
디스크 스케줄링의 종류
(1) SSTF (Shortest Seek Time First) : 큐에 들어온 친구들 중 누가 제일 seek time이 짧은가? 누가 제일 가깝냐?
- 장점 : 효율성이 좋다.
- 단점 : starvation 문제 발생 가능 (형평성)
(2) SCAN : 디스크 스케줄링의 근간이 되는 방법.
계층 간 속도 차이를 줄이기 위해 저장 장치에 계층 구성을 한다.
캐시 메모리 : 메모리와 레지스터의 속도 차이를 줄이기 위해 사용
캐싱의 원리
: 데이터가 필요하면 올리고 올리고 올려서 쓴다
: 저장을 해야 하면 내리고 내리고 내려서 저장한다
=> 다시 쓸 때 또 올라가고 내려가면 오래 걸리니까, 캐싱을 통해 중간에서 처리하자! 따라서 많이 쓸 친구를 위주로 캐싱에 저장한다.