운영체제 개요
사용 시나리오 :
1. Kim이 컴퓨터의 전원을 올린다.
2. 숙제를 위한 소스코드를 수정한다.
3. 프로그램 작성을 마치고, 소스 프로그램을 컴파일한다.
4. 컴파일이 되는 동안 그는 한글 프로그램으로 보고서를 작성한다.
5. 음악 재생 프로그램으로 그의 최애 음악을 듣고 있다.
6. 그는 그가 작성했던 프로그램을 실행한다.
7. 리포트 작성을 마치고, 그것을 출력한다.(실제 종이로)
8. 그의 컴퓨터의 전원을 내린다.
컴퓨터 시스템의 역할
앞의 사용 시나리오에 따라서, 컴퓨터는 어떤 역할을 할까?
- Booting the computer
- Running the editor, compiler, music player
- Controlling the multiple programs
- Receving the keyboard input
- Printing an output and controlling the printer
- Shutting down the computer
Operating System이란 무엇인가?
일종의 소프트웨어로, Application Programs의 실행을 제어한다.
Windows, UNIX, Linux, MacOS ... 등 여러 종류의 OS가 있다.
프로그램과 하드웨워 사이의 인터페이스이다.
컴퓨터의 자원들을 관리하는 것을 담당한다.
목적으로는 Efficiency, Convenience.
OS가 제공하는 서비스들
프로그램의 실행.
컴퓨터 자원에 대한 접근
에러 찾기 그리고 대응
통계내기.
Uni-programming / Multi-programming
OS의 발달 과정
초기에는 사람에 의해서 컴퓨터 작업이 수행됐다. (OS가 없었다.)
Serial Processing으로 기계 장치는 콘솔을 통해 돌려졌다.(불빛을 보여주고, 스위치를 올렸다 내리고, 입력 장치 및 출력)
Job Scheduling이라는 것이 없기에 사람이 알아서 다음 할 일을 정해서 넣어줬다.
사람이 모든 프로그램 작업을 제어해야 했으므로,
Setup Time에 컴파일러, 소스 프로그램을 불러오는 시간과 컴파일된 프로그램을 저장하는 것, 그리고 다시 불러오는 것과 프로그램 간의 연결을 수행하는 Linking 시간까지 들어갔다.
Simple Batch Systems
Simple Batch System은 이러한 수작업에 시간이 너무 소요 됐기에 조금은 발달한 것이다.
수행할 작업들이 컴퓨터 작업자에게 넘어가고,
작업자는 그것들을 뭉쳐서 입력 장치에 넣는다. (Batch)
그리고 이것들은 monitor라는 운영체제의 원시 형태가 제어를 하게 된다.
Monitor
일련의 이벤트들을 제어하는 소프트웨어로
Job을 읽고, 제어 권한을 주게 된다.
일이 끝나면 다시 모니터에게로 브랜치 전환이 된다. (모니터가 다음 할 일 읽고, 제어 권한 주어 실행해야지.)
Uni-programming
Processor(편의상 CPU라고 하자.)는 하나의 프로그램이 완전히 마칠 때까지 그 프로그램에 전념하는 것인데,
이런 특성 상 프로그램에서 I/O Instruction이 있다면 이것이 끝날 때까지 기다려야 한다.
그렇기 때문에 비교적 빠른 컴퓨터의 연산에 비해 I/O 작업은 너무 느리다. 그런 대기 시간에 따라 수행능력이 매우 안 좋다.
Multiprogramming Systems
이러한 Uni-programming의 단점을 극복하려고,
모종의 이유로 CPU가 해당 프로그램의 실행 대신 대기하는 시간이 주어질 경우에는 다른 프로그램의 일을 수행하도록 Switch한다.
이것이 바로 Multi Programming이다. (Uni - 하나의 / Multi - 여러 개의)
단, 여러 개를 실행하려면 CPU가 읽어올 Memory 공간에 그 여러 개의 프로그램을 넣어야 하므로, 많은 메모리 공간이 필요하게 된다.
아까의 경우와 같이 하나의 프로그램을 돌리고 있을 때, I/O 작업으로 인해 대기 상황이 있을 경우에 다른 프로그램으로 CPU의 작업이 넘어가게 된다.
2개, 3개, ... 늘어날 수 있다.
Process Scheduling
다음으로 실행할 프로그램을 정하는 것으로,
- 어떤 프로그램이 그 다음으로 CPU를 차지할 것인지
- 어떤 프로그램을 CPU가 다음으로 실행할지
정하는 것이라고 말할 수 있다.
CPU scheduling, job scheduling으로 불린다. 이런 작업들은 Kernel function로 수행된다.
Timesharing
Time Sharing Systems
여러 개의 Interactive Program들을 제어하기 위한 Multiprogramming의 방식인데, (interactive란 유저와 상호작용을 많이 하게 되는 작업으로 웹사이트, 게임 그런 것들)
여기서 프로세서의 사용 시간은 여러 명의 유저들과 공유하게 된다. (A,B,C 유저가 있을 때, 작업을 마치는 데 걸리는 시간이 공유되며, 각자의 할당된 시간에 따라서 수행이 전환되어 모든 유저들의 일이 마무리 된다.)
이러한 시간을 공유할 때, 한 유저(프로그램)에게 할당된 시간은 정해져있는데, 이 단위가 바로 Time Slice(also called time quantum)이라고 불리게 된다.
타임 슬라이스의 길이(시간)는 100 msec (1/10 sec)이다.
여러명의 유저들은 Concurrently(동시에)하게 터미널을 통해서 시스템에 접근하게 된다. 각 유저들은 CPU를 독점하고 있다고 생각하게 된다. (Time slice의 시간이 무척이나 짧기 때문이고, Concurrently라는 개념은 시스템 프로그래밍을 통해 이해하도록 하자.)