728x90
1. Operating System
- 컴퓨터는 사실 기계에 불과하다. 우리가 그 기계를 모니터를 통해서 눈으로 보고 여기저기 클릭하며 컴퓨터를 쉽게 다룰 수 있는 것은 운영체제의 인터페이스 덕분이다.
- 컴퓨터도 사실상 하나의 자원이다. 운영체제는 하드웨어 자원을 소프트웨어가 잘 사용할 수 있도록 자원을 효율적으로 관리해주는 시스템이다. 즉 운영체제는 하드웨어와 가장 직접적으로 관련되는 소프트웨어 중 하나이다.
- 예를들어 PC에서 윈도우, ios 뿐만 아니라 MP3 플레이어에서 기기를 켜면 전원이 들어와 장치를 깨우고 사용자의 명령에 따라 음악을 재생하는 동작들을 관리하는 것들도 전부 운영체제라 할 수 있다.
- 운영체제는 단일 컴파일 규모로 봤을 때, 인간이 만들어낸 소프트웨어 중 가장 큰 프로그램이라고 한다.
- 운영체제의 기능 예시
- 사용자에게 여려가지 프로그램이 컴퓨터상에서 동시에 돌아가는 것 같은 환상을 제공한다.(process management)
- 컴퓨터의 메모리와 저장소를 관리(memory and storage manangement)
- 그외 다양한 기능 : protections and security, networking, Provide I/O
- 우리가 shell에서 치는 명령어가 마우스로 여기저기 클릭하는 행동과 대응될 수 있다
2. 컴퓨터의 기본요소
- Processor
- 일반적으로 CPU(Central Processing Unit)라고 부른다. 프로그램의 instruction을 수행하는 부분.
- Main Memory
- 전원이 꺼지면 내용이 소멸 (Volatile)
- real memory, primary memory라고 한다.
- I/O Modules
- 컴퓨터와 컴퓨터 외부 환경들(모니터, 키보드, 터미널, 하드디스크) 사이에 데이터를 이동시켜준다.
- System Bus
- Processor, Main Memory, I/O Modules 사이 데이터를 주고받는 통로역할을 한다.
- 프로그램이 실행중일 때 처리할 명령어 주소를 Program Counter가 가지고 있다.
- PC에 있는 주소를 통해 명령어를 MAR로 가져옴
- MAR에서 가져온 명령들을 모으는 Buffer
- MBR에서 IR로 명령어 저장
- ALU가 IR의 명령어 수행
- PC로 돌아가서 위 과정을 반복
3. Processor
- Microprocessor
- 높은 집적도로 PC경량화에 기여
- 하나의 chip에 single processor가 탑재될 수도 있지만 여러개의 코어(processor)가 탑재된 Multiprocessor도 있다.
- Graphical Processing Units(GPU)
- 영상, 이미지 처리에 특화된 processor
- Digital Signal Processor(DSP)
- 영상이나 오디오의 음성 신호 처리에 특화된 processor
- System on a Chip(SoC)
- 소형 디바이스(휴대폰 등)를 위해 DSP + GPU + Microprocessor + 메모리등을 한곳에 집어넣은 chip
4. Instruction Execution
- 메모리에 올라와 있는 명령어집합(프로그램)을 processor가 하나씩 fetch하고 execute하면서 프로그램이 실행된다.
- 명령어가 위처럼 operation코드와 변수 address로 구성되어있음을 가정하고 아래 fetch, execute cycle의 반복으로 프로그램이 실행된다.
- AC는 계산의 중간 결과가 담기는 곳이다.
- 300번지에 저장된 명령어 1940을 IR에 저장 (fetch)
- 1940을 수행 (940에 있는 데이터를 AC에 load), PC 1증가 (execute)
- 301번지에 저장된 명령어 5941을 IR에 저장 (fetch)
- 5941을 수행 (941에 있는 데이터를 AC에 있는 데이터와 ADD), PC 1증가 (execute)
- 302번지에 저장된 명령어 2941을 IR에 저장 (fetch)
- 2941을 수행 (941에 AC의 값 저장), PC 1증가 (execute)
5. Interrupt
- processor의 fetch, execute은 매우 빠른 속도로 수행된다. 반대로 I/O모듈의 명령어 처리 속도는 상대적으로 매우 느리다.
- 예를들어 화면에 "hello"를 출력해라! 라는 명령을 CPU가 I/O모듈에게 내렸다고 할때, I/O모듈이 화면에 내용을 출력하고 일을 다 했다고 CPU에게 알릴 때까지 시간이 많이 소요된다. 즉 I/O모듈이 일을 하는동안 CPU는 쉬게 된다. 이런 idle상태는 자원의 낭비이다.
- 따라서 CPU가 I/O모듈에게 "화면에 출력해~"라고 명령을 하고나서 다음 해야할 일을 하고 있다가 I/O모듈이 일을 다 했다는 신호를 줄때 CPU가 현재 하던 일을 잠깐 멈추고 이전 일을 마무리하면 CPU는 항상 일하는 상태를 유지하게 된다.
- 이런식으로 normal sequence를 건너뛰면서 cpu활용을 최대로 할 수 있게 하는 방법을 interrupt라고 한다.
- 인터럽트 종류
- 프로그램 동작중에 오류가 발생했다면 interrupt가 발생되어 프로그램을 종료할 수 있다. (ex. 0으로 나누기등의 오류)
- I/O처럼 느린 동작이 완료되었을 때 interrupt발생
- timer를 설정해서 시간이 만료되었으면 interrupt가 발생돼서 다음 동작으로 넘어가도록 할 수 있다.
- 만약 interrupt가 없다면, cpu는 1번을 수행하다 write작업을 만났을 때, i/o 커맨드를 날리고 i/o모듈이 4,5를 수행하는 동안 기다리게 된다.
- 1-4-5-2-4-5-3-4-5 순으로 작업이 진행되고 4,5가 수행되는 동안 cpu는 쉬게 된다.
- 인터럽트가 존재한다면 수행 sequence는 다음과 같다.
- cpu가 1번을 만나 write를 수행하게 되면 i/o command만 날리고 다음 2번 동작을 수행한다. 2번 동작을 수행하는 중에 5번이 완료 되었다는 interrupt를 받으면 하던일을 멈추고 5번을 마무리 짓고 다시 2번b로 돌아와 하던일을 계속한다.
- 1-4-2a-5-2b-4-3a-5-3b 순으로 작업이 진행되고 cpu는 쉬지 않고 일을 할 수 있다.
- interrupt가 왔을 때 하던일을 마무리짓고 interrupt를 발생시킨 작업으로 넘어가면 long wait이라고 하고 반대로 위 그림처럼 interrupt가 발생한 즉시 interrupt를 처리하고 돌아온다면 short wait이라고 한다.
- program을 순서대로 처리하는 와중에 현재 i에서 작업중인데 interrupt가 들어왔다면 다른 작업으로 흐름이 넘어갔다가 i+1로 돌아와 작업을 마무리한다.
- fetch -> execute이 완료되면 interrupt가 발생했는지 여부를 확인한다. interrupt를 인식했다면 이전 작업중인 내용을 저장하고 인터럽트를 처리한다.
- 인터럽트를 처리하는 와중에 또 인터럽트가 발생할 수 있다. 이럴때는 인터럽트의 우선순위를 두고 더 높은 우선순위의 인터럽트가 바로 처리될 수 있도록 할 수 있다.
- 더 높은 우선순위의 인터럽트가 발생했다면 현재 작업을 멈추고 우선처리를 해준다. 반대로 우선순위가 낮다면 현재 작업을 끝내고 나중에 발생한 인터럽트를 처리할 수 있다.
- 위 그림에서의 우선순위는 다음과 같다. communication > disk > printer interrupt
6. Memory Hierarchy
- 메모리의 접근 속도, 용량에 따라서 메모리종류는 계층구조를 이룬다.
- 제일 빠르고 용량이 적은 register, cache, main memory부터 상대적으로 용량이 크면서 접근속도가 느린 disk(secondary memory)를 아래 피라미드 형태로 도식화할 수 있다.
- 상대적으로 빠르고 용량이 큰 register만 사용하기엔 금액, 기술적 한계가 존재한다.
- 따라서 각 계층의 메모리를 섞어서 사용하게 되는데 내가 지금 필요한 데이터가 cache 혹은 main memory에 있다면 비교적 빠른 접근 속도로 데이터 접근이 가능할것이고 반대로 disk에 있다면 읽어오는데 많은 시간이 걸릴 것이다.
- 메모리에 대한 평균 접근 시간을 줄이기위해 locality(지역성)의 원리를 활용한다. 대게 앞으로 필요할 데이터는 지금 보고있는 데이터 근처에 있을 확률이 높다는 원리이다. 예를들면 우리가 int arr[10]의 index 1번 데이터를 참조하고 있다면 2번부터 9번을 그 뒤에 사용할 가능성이 매우 크다는 것이다.
- 지역성의 원리를 활용하여 cpu의 메모리 접근 시간을 줄이는 대표적인 방법으로 cache memory가 있다.
- 메모리에서 데이터를 일부 복사해서 cache에 올려둔다. 이때 올려두는 데이터 단위를 block이라고 한다. cache에 올려둘 데이터는 지역성을 활용하여 판단한다. 이전 예시 처럼 int arr[10]에서 현재 0번을 참조하고 있다면 0부터 10까지를 전부 cache에 올려두는 것이다. 왜냐하면 0번에 이어서 1부터 9번을 사용할 확률이 매우 높기 때문이다.
- cpu가 cache에서 명령어를 읽어오는 단위를 word라고 한다.
- cache를 여러 계층으로 구성하여 더 효율적 접근 시간을 구현할 수도 있다.
- processor는 cache에 내가 찾는 데이터가 있는지 확인한다. cache에 존재한다면(hit) 바로 가져가서 사용한다. 반면 찾으려는 데이터가 cache에 없다면(miss) 메인메모리에서 그 데이터를 cache로 가져오고나서 processor는 접근할 수 있게 된다.
- 이런 방식으로 접근속도를 높이면서 더 큰 메모리를 사용할 수 있게 한다.
- cache를 design하는데 고려해야하는 여러 요소가 있다.
- 메인메모리에서 cache로 복사해올 데이터 unit의 크기(block)
- cache의 크기, cache의 수(L1, L2, L3)
- cache에 새로운 block이 들어올때 누구와 교체할 것인가? 혹은 어느 slot에 저장할 것인가?
- 변경된 내용을 그때그때 저장(write)할 것인가? 아니면 block이 replace될 때 변경내용을 저장할 것인가?
- cpu(processor)와 cache까지가 하나의 chip이다.
7. Programmed I/O
- I/O로부터 제어권을 CPU가 가져와서 작업을 진행
- 예를들어 ABCD를 출력한다고 하자. A를 출력하는 동안 cpu는 B를 받을 준비가 되었는지 매번 status를 확인해야한다. 이런식으로 ABCD가 전부 출력될때까지 i/o에게 cpu가 계속 점유되어있게 된다.
- 정리하면 I/O module들이 cpu로부터 요청받은 동작을 수행하고 I/O status register에 완료, 미완료 상태를 저장해 둔다. processor는 주기적으로 그 상태들을 확인하고 instruction이 마무리 되었는지 결정하게 된다.
- cpu가 입출력 명령을 요청
- 입출력 모듈이 명령을 수행
- 입출력 모듈의 상태 비트 저장
- cpu가 주기적으로 상태비트 확인
- performance가 낮음
8. Interrupt-Driven I/O
- CPU의 대기를 극복하기위해 나온 방식이다.
- I/O 모듈은 준비가 되면 인터럽트를 보내기 때문에 CPU가 반복적으로 장치를 확인할 필요가 없다.
- CPU 입장
- 읽기 명령을 보낸다.
- 다음 일을 하나씩 처리한다. 일을 처리할때마다 인터럽트가 왔는지 확인한다.
- 만약 인터럽트가 있으면 context를 저장하고 인터럽트를 수행합니다.
- I/O모듈 입장
- 읽기 명령을 CPU로 부터 받았음.
- 데이터를 장치로부터 읽어온다.
- 데이터를 다 읽어와서 준비가 되었을 때, 프로세서에게 인터럽트 신호를 보낸다.
- 프로세서로부터 데이터 요청 명령이 들어올 때까지 기다린다.
9. Direct Memory Access(DMA)
- CPU가 읽을것인지 쓸것인지, 장치 주소, 메모리의 주소 정보, 얼마의 데이터를 보낼 것인지의 내용을 DMA에게 전달해준다.
- CPU는 다음 작업을 진행한다.
- DMA 제어기는 cpu로부터 받은 정보를 바탕으로 데이터를 i/o모듈, 메모리 사이에서 전달해준다.
- DMA 제어기의 작업이 끝나면 interrupt를 발생시킨다.
10. Symmetric Multiprocessors
- 여러 프로세서가 메인메모리, bus, i/o모듈을 공유하는 모양.
- 수행능력 향상, 소비자의 선택지가 넓어지고 프로세서 하나가 고장나도 동작이 가능하다는 장점이 있다.
- os가 이 여러 프로세서들에게 효율적으로 일감을 던져줄 수 있어야한다. (스케쥴링, 동기화 기능 중요)
- single chip에 다중 코어, L1, L2, L3 cache가 들어가 있는 모습
728x90
반응형
'ComputerScience > Operating System' 카테고리의 다른 글
OS - 5.2 Concurrency: Mutual Exclusion and Synchronization (0) | 2021.07.14 |
---|---|
OS - 5.1 Concurrency: Mutual Exclusion and Synchronization (0) | 2021.07.13 |
OS - 4 Threads (0) | 2021.07.07 |
OS - 3 Process Description and Control (1) | 2021.07.06 |
OS - 2 Operating System Overview (0) | 2021.07.06 |