운영체제는 컴퓨터 User와 컴퓨터 Hardware 사이의 인터페이스 역할을 한다.
자원이 필요한 프로그램에 자원을 할당하고, 자원을 할당받은 프로그름들의 실행을 제어한다.
운영체제가 하는 일은 다음과 같다.
본문에서 자주 언급되는 프로그램과 프로세스는 다른 개념이다.
Program은 현재 메모리에 올라온 Process들 중 실행 중인 Process를 말한다.
Process는 CPU time, Memory, files, I/O 등 여러 자원을 필요로 한다.
OS는 사용자의 요청이 발생하면 적절하게 자원을 분배하여 그 요청을 처리해준다.
컴퓨터에는 CPU와 다양한 I/O device들이 존재하는데 CPU에는 단 하나의 프로그램 밖에 올라가지 않는다.
만약 해결 중이던 프로세스가 I/O 대기 상태면 그 시간동안 CPU가 놀게 된다.
따라서 메모리에 여러 프로세스들을 올려두고 I/O 대기 상태가 되면 다음 일로 넘어가 최대한 CPU의 대기상태를 제거하는 방법이 멀티프로그래밍이다.
멀티프로그래밍에도 단점이 있다. 이 방식을 쓰면 작업들마다 자원을 사용함에 있어 시간차가 생기게 된다.
예를 들어, 1번 작업이 CPU를 사용한 뒤 I/O를 사용하게 되면 CPU는 2번 작업에 할당되어 2번작업은 CPU를 사용하게 된다.
그런데 이때 1번 작업의 I/O 사용시간이 길어지게 되면 2번 작업이 CPU를 이용한 작업을 끝내더라도 I/O 작업으로 들어가지 못하고 계속 대기하게 된다.
이때 CPU 자원의 낭비가 일어나게 된다. 이런 문제를 해결하기 위해 Multitasking이 나오게 된다.
시간 공유방식은 멀티 프로그래밍에서 확장된 방식이다. 이것을 멀티 태스킹(Multitasking)이라 부르기도 한다.
일괄 처리 시스템에서는 하나의 일이 끝날때까지 다른 작업이 CPU를 사용할 수 없는 문제가 있었다.
그래서 CPU가 scheduling을 통해 작업들을 빠르게 스위칭하면서 동시에 프로그램이 작동하는 것처럼 보이게 한다.
멀티 태스킹을 위해 메모리에 여러 일을 올려 놓을 경우 메모리가 모자를 수 있는데, 이런 경우 스와핑을 통해 프로세스를 가상 메모리에 저장한다.
CPU의 실행시간을 나누는 단위를 타임 슬라이스라고 한다.
일반적으로 10ms이며 모든 일은 타임 슬라이스동안 CPU를 점유하고 그 시간이 끝나면 CPU를 양보한다.
현대의 OS는 인터럽트 방식을 사용한다.
인터럽트는 CPU가 일을 처리하고 있을 때 I/O device 등의 장치나 예외상황이 발생해 처리가 필요할 경우에 신호를 주어 처리할 수 있도록 하는 것을 말한다.
인터럽트는 H/W Interrupt, S/W Interrupt의 두 방식으로 나뉜다.
컴퓨터 전원이 켜지면 CPU는 ROM(Read Only Memory)에 저장된 내용을 읽는다.
CPU는 초기화를 위해 Boot Loader에 모인 명령들을 읽고, Disk(HDD, SSD)에 있는 프로그램들을 RAM(Random Access Memory)에 올린다.
프로그램들이 메모리에 올라오면 CPU가 해당 프로그램을 작동시킨다.
https://baked-corn.tistory.com/3
https://data-make.tistory.com/667
https://been2.tistory.com/19