phase 0-3
Phase 0 — hardware is a very expensive experiment; no operating systems exist
Phase 1 — hardware is expensive, humans are cheap
Simple batch processing: load program, run, print results, dump, repeat
Overlapped CPU & I/O operations
I/O
: 디스크에서 데이터를 읽거나(input) 프린터로 출력하는 작업(output)
1) I/O 버퍼링과 장점?
교수님 ver.
새끼 CPU가 뭔데 진짜
CPU는 혼자서 모든 일을 다 감당하기 힘들죠. 그래서 I/O 장치들 안에 작은 CPU들이 심어져 있는 거예요. 엄마 CPU가 "오늘 OS 수업 가서 열심히 들어와!"라고 지시하면, 새끼 CPU들은 "알겠습니다. 제가 버스 타고 전철 타고 가서 수업 들을게요"라며 자기 할 일을 스스로 해결하는 거죠.
이런 식으로 엄마 CPU가 새끼 CPU들한테 작업을 떠넘기면, 엄마는 다른 중요한 일에 전념할 수 있게 되는 거예요. 이렇게 역할을 나눠서 동시에 작업하는 것을
Overlapped CPU & I/O Operation이라고 부르는 겁니다 !!
2) 스풀링이란?
SPOOL(스풀링)은 새끼 CPU들이 일한 결과물을 엄마 CPU가 신경 쓰지 않게 임시로 저장해두는 곳 입니다. 프린터나 네트워크 작업 같은 I/O 작업 결과를 말이죠..
엄마 CPU가 굳이 I/O 작업 과정을 지켜볼 필요 없이, SPOOL에 있는 결과만 가져다 쓰면 되니까 효율적이게 됩니다.
그렇게 역할 분담하며 동시에 작업하면 비싼 CPU 자원을 낭비없이 효율적으로 쓸 수 있게 되는 것 입니다 !!
Multiprogrammed batch systems
엄마 CPU가 하나인데 어떻게 여러 프로그램을 동시에 돌릴 수 있냐?
새끼 CPU 덕분이죠 ..
[추가로 알아 둘 것] (나중에 나오는 개념, 매우 중요 !)
사실 여러 프로그램을 돌리기 위해서는 다음과 같은 개념이 매우 중요합니다.
1. CPU 스캐줄링
여러 프로그램을 디스크에 올려두고, 그중에서 돌릴 프로그램들을 메모리에 올립니다.
그리고 CPU가 그 프로그램들을 번갈아가며 조금씩 실행하는 거죠.
어떤 프로그램을 메모리에 올릴지는 스케줄링 기법에 따라 결정됩니다.
예를 들어 **우선순위가 높은 프로그램**부터 메모리에 올리는 식이죠.
2. 메모리 관리 기법
여러 프로그램이 메모리 영역을 겹치지 않게 적절히 배치하고 보호합니다.CPU가 프로그램들을 실행할 때마다 콘텍스트 스위칭을 하면서 번갈아가며 작업을 수행
⇒ 즉, 진짜 '동시에' 실행하는 건 아니고 CPU가 프로그램들을 매우 짧은 시간 단위로 번갈아 가며 실행하는 멀티태스킹인 셈 입니다 !!
Phase 2 — hardware is less expensive than before, humans are expensive
Interactive timesharing
1) 타임 쉐어링이란?
내가 필요할 때만 쓰고 ~.. 내가 안쓸때는 다른 사람이 써도 된다고~
디스크도 저렴해졌다고 합니다. 프로그램과 데이터를 온라인에 올려두었습니다.
교수님 맨날 뭐 OMR 카드 하나하나.. 말씀하실것..
아무튼 지금은 저렴해졌다는 것만 기억하면 됨**preemptive, swapping 은 나중에도 나오는 중요한 용어이니 꼮꼮 기억해두도록 합시다.**
1) Preemptive scheduling ?
- 프로세스들이 너무 많아져서 Preemptive scheduling 이 필요해졌습니다.
- 상위 프로세스가 하위프로세스를 밀쳐내고, CPU를 점거 하는 것을 의미합니다.
2) swapping?
- 메모리 사이즈는 정해져 있는데, 프로세스를 너무 많이 로딩하면 성능이 나빠지는 경우가 있습니다.
- 그래서 Swapping 기법을 사용해서 필요 없는 프로세스들은 디스크로 내려보내는 것을 의미합니다.
여기서 질문 할만할 것.
Swapping은 누가 하나요?
커널이요. 뒤에나옴~ 
> 메인 메모리 리소스 부족 → 멀티태스킹 성능 저하

> Swapping
- Success: UNIX developed at Bell Labs so a couple of computer nerds (Thompson, Ritchie) could play Star Trek on an unused PDP-7 minicomputer
웃기지만 유닉스 개발 배경은 **Bell** Labs에서 컴퓨터 덕후 두명이 미사용 PDF-7 미니컴으로
스타트렉 게임을 돌릴려고 만들었다는 것이 웃음 **Bell**
잠깐 중요한 개념 !!!
커널에 대해서 더 자세하게 배워봅시다.
> **Kernel**
**process[0] : scheduler**
>
> - CPU 스케줄링을 담당하는 프로세스입니다.
> - 어떤 프로세스가 CPU를 점유할지 결정하고 순서를 정해줍니다.
>
> **process[1] : swapper**
>
> - 메모리가 부족할 때 불필요한 프로세스를 디스크로 내려보내고 (swap out)
> - 필요할 때 다시 메모리로 불러오는 (swap in) 역할을 합니다. (둘 다 자동)
>
> **process[2] : paper**
>
**Phase 3 — hardware is very cheap, humans are expensive**
1. Personal computing
- CPUs are cheap enough to put one in each terminal, yet powerful enough to be useful
– Computers for the masses!
- Return to simplicity; make OS simpler by getting rid of support for
multiprogramming, concurrency, and protection
```
CPU가 터미널 마다 하나씩 들어갈 정도로 저렴해졌다고 합니다.
컴퓨터는 서민의 것..
근데 좀 아이러니 한 건 OS를 단순하게 만들기 위해서
멀티프로세싱, 동시성, 보안 지원을 다 뺐다는 점!
```
```
어플이 수행 할 때 사용하는 모드의 비율입니다.
이거 수업시간에 질문 많이 하시니까 꼭 기억해두기
```
> 커널 모드 : 60%
유저 모드 : 40%
근데 커널 모드에서 도는 것은 특별한 모드겠죠? 즉 여기서 down되어 버리면 os 전체가 엉망이 됩니다. 그래서 시스템 콜을 할 때 마다 모드가 바뀌게 되는데, 이 커널 모드를 들어오기 위해서는 정장에 구두 신고 들어와야 한다고 합니다.
>

```
**잠깐만 내가 필기하다가 약간 혼동 된 개념**
시스템콜 vs 인터럽트
시스템 콜은 프로세스가 운영체제에게 특정 서비스를 요청하는 것.
일 읽기/쓰기, 메모리 할당, 새 프로세스 생성 등의 작업을 운영체제에게 부탁하는 거죠.
이는 마치 레스토랑에서 손님이 종업원을 불러 주문을 하는 것과 같습니다.
반면 인터럽트는 하드웨어 장치나 소프트웨어가 CPU에게 "주목해주세요!"라고 말하는 것과
같아요. 예를 들어 키보드에서 키를 누르면, 키보드 컨트롤러가 CPU에게 인터럽트를 보내
"새 입력이 있어요!"라고 알리는 것 입니다! 이는 마치 손님이 식사 중에 종업원을 불러
"물 좀 더 주세요"라고 하는 것과 유사합니다.
또한 시스템 콜은 일반적으로 동기적(synchronous)
프로그램이 시스템 콜을 호출하면 해당 작업이 완료될 때까지 기다리는 거죠.
반면 인터럽트는 비동기적(asynchronous)
인터럽트가 발생하면 CPU는 현재 작업을 중단하고 인터럽트 처리 루틴을 실행합니다.
요약하면:
- 시스템 콜: 프로세스가 OS에 서비스를 요청, 동기적, 소프트웨어가 의도적으로 호출
- 인터럽트: 하드웨어나 소프트웨어가 CPU에 주의를 요청, 비동기적, 예측 불가능한 시점에
외부 사건에 의해 트리거
```
**Modern operating systems are:**
- Enormousn
- Small OS = 100K lines of coden
- Big OS = 10M lines
- Complex (100-1000 person year of work)l
- Poorly understood (outlives its creators,too large for one person to comprehend
```
요즘 OS는 진짜 거대해졌습니다.
작은 OS도 10만 줄이 넘고, 큰 OS는 무려 1000만 줄이 넘는 !!
```
```
그렇다고 합니다
```OS의 목표 → 효율 → 멀티태스킹
but, 충돌이 발생할 수 있음 !!
엄마 CPU는 하나인데, 새끼 CPU를 최대로 사용하려하니 충돌이 발생
(리소스 공유)
그럼 이를 해결하기 위한 방법은?
”멀티 태스킹을 포기하자”
→ Serialization으로, 한 순간에 하나만 돌리도록 하면 된다.
간단하네요..
메모리 관리는 OS의 중요한 역할 중 하나 입니다 !
위에 배운 Swapping개념을 꼭 익혀두도록 합시다.Shared memory, shared clock
Large number of tightly-coupled processors
Appearance of single operating system
병렬 OS는 공유 메모리와 공유 시계를 사용합니다.
엄청 많은 프로세서들이 서로 밀접하게 연결 되어 있는데, 마치 하나의 OS 처럼 보이는 것 입니다.
No shared memory, no shared clock
Small number of loosely-coupled processors
Appearance of single operating system is
ideal goal, but not realized in practice
May try to simulate a shared memory
반면 분산 OS는??!!
공유 메모리도, 공유 시계도 없는 것 입니다.
프로세서들이 멀~찍이 떨어져서 느슨하게 연결되어있습니다.
이것도 하나의 OS처럼 보이는 것이 이상적이지만, 현실은 그렇지 못한다고 합니다.
그래서 가짜로라도 공유 메모리를 만들어 보려 try 중 이라고 하네요.
병령 컴퓨터와 분산 컴퓨터의 차이?
: Shared Memory!!
Meet hard / soft real-time constraints on processing of data
real-time constraints = dead line
즉 실시간 os는 데이터 처리에 대한 엄격한 시간제약을 지켜야 합니다.
비행기나 로켓 같은 경우, 언젠가 끝나면 되는것이 아니라 !!
정해진 시간 안에 계산이 끝나야 합니다.
근데..CPU가 감당할 수 있는 일이 너무 많으면 어떻게 데드라인을 지킬까요?
그래서 애초에 CPU한테 맡길 수 있는 작업의 개수를 정해둔다고 합니다 ~