전기창지 CPU와 기계장치인 Input/Output device간 속도 차이(병목 현상)으로 인해
I/O 디바이스가 작업을 하는 동안 task가 Blocked되는 현상이 존재했다.
레지스터 -> 캐시 -> 메인 메모리(RAM) -> Disk(SSD, HDD)
우측으로 갈수록 각 메모리 접근 시간이 점점 느려진다.
특히나 캐시 메모리는 메인 메모리와 레지스터 간 속도 차이를 줄이기 위해 존재한다.
Spooling
주변기기와 컴퓨터 처리 장치 간에 데이터를 전송할때 처리 지연을 단축하기 위해 보조기억 장치를 완충 기억 장치로 사용하는 것
중앙 처리장치와 I/O 디바이스 등 컴퓨터 주변 장치의 독립적으로 작동하게 한다.
보조 기억장치를 하나의 버퍼로 사용한다고 볼 수 있다.
I/O요청이 있으면 디바이스와 연결된 저장장치 공간에 task를 쌓아놓고 cpu는 다른 작업을 할 수 있다.
이는 프로세스 입장에서는 입출력 처리가 발생할 시 이전 작업의 종료를 기다리지 않고 I/O 디바이스 버퍼에 요청을 쌓아놓으면 되는 것이기 때문에, 프로세스당 독립적인 입출력 장치를 할당받는 것으로 이해할 수도 있다.
Multi Programming
초기 컴퓨터는 하나의 task를 실행하고 완료된 후 다음 task를 실행할 수 있었다 즉 한번에 하나의 작업만 가능했다.
하지만 위에서 말했듯 입출력 기기와 프로세서 간 속도 차이와 각 메모리의 접근 시간 차이가 있기 때문에 병목현상이 자주 발생했다.
사람은 비싼 돈 주고 산 기계가 쉬는 꼴을 못보기 마련이다. 이런 비효율을 해결고자, 컴퓨터를 어떻게든 혹사시키기 위해 프로세서가 입출력 작업을 요청하고 대기시간 동안 다른 일을 처리할 수 있도록 하는 것이 MultiProgramming이다
그림의 예시로 보면
만약 Job 1이 I/O 처리를 위한 대기 시간으로 들어가면 다음 Job2가 실행되는 것이다.
Job2는 I/O 요청이 없다면 끝까지 처리한다. 이후 또 다음 스케쥴된 Job으로 넘어가는 것이다.
근데, 딱봐도 조금 이상해 보이나. 일단 다음 job이 수행되려면 현재 수행되는 job이 I/O를 해야 할것이고, Job1이 I/O요청이 있는 간단한 작업이고 Job2는 I/O작업이 없는 복잡한 작업이라면 Job1은 I/O처리를 끝내고도 계속 다음 스케쥴을 기다려야 한다.
Time sharing
CPU의 실행 시간을 타임 슬라이스 (Time Slice)로 나누어 실행한다.
모든 프로그램이 타임 슬라이스 동안 CPU를 점유하고 그 시간이 끝나면 CPU를 양보한다.
나중에 얘기할 Round Robin 과 형태가 유사하다고 할 수 있다.
여러개의 작업들이 cpu 스위칭을 통해 동시에 실행된다.
그야말로 공산주의 식으로 매우 공평하긴 하지만, 일단 cpu 스위칭, Context Switching 이 빈번하기 때문에 오버헤드가 커질 수 밖에 없고, 많은 작업이 필요한 job과 간단한 job 모두 동일한 작업 시간을 할당받기 때문에 비효율을 야기할 수 있다.
Multitasking
여러개의 Task emfdl CPUR와 같은 자원을 공유하도록 하는 방법
대표적으로 한개의 Job에 Unix fork() 시스템콜을 통해 여러개의 프로세스로 실행시키는 것이 있다.
즉 여러 프로그램이 동시에 수행(Concurrent Execution) 된다고 볼 수 있다.
멀티 태스킹 이슈
- 메모리 관리
- 동시에 여러 프로그램이 메모리에 상주하기 때문에 각 프로세스 간 접근하면 안되는 메모리를 보호하는 시스템이 필요하다.
- cpu scheduling
- cpu 스케쥴링 Policy가 필요하다
- 동기화
- 공유 자원에 동시 접근에 대해서 접근 순서를 보장해줄 필요가 있다.
그 외 시스템
'운영체제' 카테고리의 다른 글
[OS4] Context Switch, Process Creation, Copy On Write (0) | 2024.03.12 |
---|---|
[OS4] Process, PCB (0) | 2024.03.04 |
[OS3] Monolithic Kernel, Micro Kernel, Hypervisor (0) | 2024.02.23 |
[OS3] Kernel Structure, Layering, Modularity, System call (0) | 2024.02.23 |
[OS1] Abstraction, Policy (0) | 2024.02.20 |