>- 운영체제의 주요 기능
>- 논리 주소와 물리 주소(실제 주소) 간의 관계
>- CPU 스케쥴링
<br>
## OS 개요
- OS의 정의
= **컴퓨터 리소스(메모리, 입출력 장치 등)를 관리하는 System Software**
실생활 문제를 해결하기 위한 응용 소프트웨어(Application Software)와는 구분됨
<br>
- OS의 역할
- 응용 프로그램들이 생성되고 실행되기 위한 환경 제공
- 메모리 관리 (어떤 프로그램이 메모리에 적재되어 있고, 어디에 적재되어있는지 파악)
- 프로세스 관리 (프로세스 진행 상황과 상태 파악, **CPU 스케쥴링**)
- 하드웨어와 직접적으로 상호작용
- 사용자를 위한 인터페이스 제공

- OS의 목표
= 컴퓨터 리소스를 실행중인 프로그램들에 잘 분배하기
다양한 프로그램들이 ==**concurrent(병행, 동시에)**== 하게 실행되며 메인 메모리를 공유할 때
운영체제는 모든 프로그램이 CPU와 입출력장치를 이용할 수 있도록 공평하게 순서를 정해줌
<br>
#### Booting(bootstrapping)
1. ROM에서 OS 실행 명령 몇줄(==**boot loader**==)을 가지고 와서 RAM에 적재
2. 이 명령을 실행해서 HDD로부터 system software 명령을 가져와 RAM에 적재
3. OS 실행, 시작 프로그램이 실행되고 유저 인터페이스가 활성화됨
> 모든 프로그램과 데이터는 실행되고, 접근될 때 메인 메모리에 저장되어 있어야 함.
<br>
## **CPU 스케쥴링(CPU Scheduling)** ✨
- CPU 스케쥴링이란
메모리에 있는 프로세스 중 **어떤 프로세스를 CPU가 실행할 것인지** 결정하는 과정
- CPU 스케쥴링의 목표
- **평균 Turnaround time 최소화하기**
- Turnaround time : 프로세스 완료 시간(시작 상태와 종료 상태 사이의 시간)
<br>
#### 예시로 보는 CPU 스케쥴링 알고리즘

- Batch Processing
- **FCFS**: First Come, First Served
- n1 + (n1+n2) + (n1+n2+n3) + (n1+n2+n3+n4) + (n1+n2+n3+n4+n5)

- 평균 시간은 (140+215+535+815+940) / 5 = **529**
- **SJN**: Shortest Job Next
- 가장 서비스 타임이 적은 프로세스부터 실행

- 평균 시간은 (75+200+340+620+940) / 5 = **435**
- **RR**: Round Robin
- time slice(time quantum)을 정해서 각 프로세스를 time slice만큼씩 실행하고 전환함
- 아래 예시에서는 time slice를 50이라고 가정

- 평균 시간은 (515+325+940+920+640) / 5 = **668**
- **conqurrent하게 동시에 여러 개의 프로세스를 실행할 수 있어서 RR이 주로 사용됨**
<br>
## 논리 주소와 물리 주소 간의 관계
- 논리 주소 : 실제 메인 메모리가 아니라 프로그램에 따라 달라지는 위치의 구체적인 값
- 물리 주소 : 메인 메모리의 실제 주소

> paged memory management : 프로그램을 쪼개서 메모리에 올려서 실행하는 메모리 관리 방법
<br>
## OS를 이해하기 위한 다양한 용어
- **멀티프로그래밍(Multiprogramming)**
- 메인메모리에 여러개의 프로그램을 동시에 상주시키는 것을 멀티프로그래밍이라고 함
<br>
- **프로세스(Process)**
- 프로세스 = 실행중인 프로그램 (프로그램은 명령어 집합에 불과함)
- 실행중이기 때문에 동적인 특성을 가지고 있음
- 멀티프로그래밍을 통해 컴퓨터 시스템은 한번에 여러개의 액티브한 프로세스를 가지고 있을 수 있음
- **Process States**
enter, ready, executing, waiting, finished

- **Process Control Block(PCB)**
운영체제가 프로세스 정보를 관리하기 위한 자료구조
e.g. 마지막으로 실행한 명령
<br>
- **Timesharing(시 분할)**
- 시분할 시스템 = 동시에 다수의 사용자가 컴퓨터와 상호 작용할 수 있는 시스템
- ~~(원래는 메인프레임이라 불리는 하나의 컴퓨터와 거기에 연결된 단순 터미널로 이루어진 형태였음)~~
- 시분할 운영 체제는 CPU 스케줄링과 멀티프로그래밍을 이용해서 각 사용자들에게 컴퓨터 자원을 시간적으로 분할하여 사용할 수 있게 해줌
<br>
- **Context Switch**
실행중인 프로세스 변환
e.g. 실행 중이던 프로세스의 명령어를 저장하고, PCB에서 실행할 명령 불러오고
<br>
## 퀴즈
- 컴퓨터는 하나 이상의 운영체제를 가질 수 있지만, 어느 순간이든 오직 하나의 OS만이 동작한다. = T
- 멀티프로그래밍 환경에선느 많은 프로세스가 활성화될 수 있다. 운영체제가 활성 프로세스의 메모리 요구 사항을 관리하기 위해 달성해야 하는 작업은 무엇인가?
- 프로그램이 메모리 어디에 적재되어 있는지 파악하고 논리 주소를 물리 주소로 변환해야 함.
<br>
<br>
<br>
<br>