# 운영체제와 멀티프로그래밍
## 목차
1. 멀티프로그래밍
2. 프로세스
3. CPU 스케쥴링
4. 프로세스 스케쥴링
5. 가상 메모리와 스와핑
6. 파일 시스템
## 멀티프로그래밍
우리는 이전 강의에서 다양한 컴퓨터의 구성요소에 대해서 이야기 하였습니다. 그렇다면 이제 OS를 이야기할 준비가 끝난거군요? 본격적으로 OS에 대해 하나하나 파해쳐 봅시다.
OS가 처리해야할 가장 중요한 일을 하나 꼽자면, 그것은 멀티프로그래밍(multiprogramming)일 것입니다. 우리는 앞서 동시에 수행 프로그램들이 실제로는 매우 짧은 순간들마다 번갈아 실행된다 배웠는데요, 이를 멀티프로그래밍이라고 합니다.
![Imgur](https://i.imgur.com/EtpZkDX.png)
## 프로세스
OS는 이러한 멀티프로그래밍을 수행하기 위해 수행할 프로그램들을 메모리에 적재해야하는데, 프로그램이 실행되기 위해 메모리에 올려진 상태, 이를 프로세스(process)라고 합니다.
![Imgur](https://i.imgur.com/3NtMkNq.png)
## CPU 스케쥴링
이렇게 적재된 프로세스는 OS에 의해 선택적으로 실행됩니다. 어느 프로세스를 먼저 수행 할 지 결정하는 작업, 이를 CPU 스케쥴링(scheduling) 이라고 합니다. 하나의 CPU는 단 작업만을 수행 할 수 있기 때문에, 어느 것을 먼저 선택하여 실행할지에 대한 작업은 매우 중요합니다.
![Imgur](https://i.imgur.com/wNoWfiV.png)
## 프로세스 스케쥴링
CPU가 프로세서를 선택적으로 실행하는 것 처럼, 프로그램 또한 선택적으로 메모리에 적제 됩니다. 이러한 과정을 프로세스 스케쥴링 이라고 합니다. CPU와 마찬가지로 메모리 또한 한정된 자원이기에, 프로세스 스케쥴링은 매우 중요 이슈입니다.
![Imgur](https://i.imgur.com/m9ktjIz.png)
## 가상 메모리와 스와핑
메모리가 프로세스로 가득 찬 상황에서 새로운 프로그램들을 수행해야 한다면 어떻게 해야할까요? 중요하지 않은 순서에 따라 기존의 프로세스들을 메모리에서 제거해야 할 것입니다. 하지만 프로그램이 프로세스화 되는 작업은 상당한 비용(시간 & 자원)이 들기 때문에, OS는 한번 프로세스화 된 것들을 가상 메모리(virtual memory)라는 공간에 저장합니다. 가상 메모리는 보조기억장치(SSD, HDD, ...)의 특정한 공간에 위치합니다.
이렇게 프로세스세스들은 필요에 따라 가상 메모리로 내려가기도, 실제 메모리로 올라가기도 하는데 이러한 작업을 메모리 스와핑(swapping)이라고 합니다.
![Imgur](https://i.imgur.com/YJe33rt.png)
## 파일 시스템
마지막으로 OS는 다양한 프로그램 데이터와 가상메모리 그리고 여러 장치들을 관리하기위해 파일(file)이라는 시스템을 사용합니다.