본문 바로가기

ComputerScience/Operating System

OS - 1 Computer System Overview

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 사이 데이터를 주고받는 통로역할을 한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  1. 프로그램이 실행중일 때 처리할 명령어 주소를 Program Counter가 가지고 있다.
  2. PC에 있는 주소를 통해 명령어를 MAR로 가져옴
  3. MAR에서 가져온 명령들을 모으는 Buffer
  4. MBR에서 IR로 명령어 저장
  5. ALU가 IR의 명령어 수행
  6. 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

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 메모리에 올라와 있는 명령어집합(프로그램)을 processor가 하나씩 fetch하고 execute하면서 프로그램이 실행된다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 명령어가 위처럼 operation코드와 변수 address로 구성되어있음을 가정하고 아래 fetch, execute cycle의 반복으로 프로그램이 실행된다.
  • AC는 계산의 중간 결과가 담기는 곳이다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  1. 300번지에 저장된 명령어 1940을 IR에 저장 (fetch)
  2. 1940을 수행 (940에 있는 데이터를 AC에 load), PC 1증가 (execute)
  3. 301번지에 저장된 명령어 5941을 IR에 저장 (fetch)
  4. 5941을 수행 (941에 있는 데이터를 AC에 있는 데이터와 ADD), PC 1증가 (execute)
  5. 302번지에 저장된 명령어 2941을 IR에 저장 (fetch)
  6. 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가 발생돼서 다음 동작으로 넘어가도록 할 수 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 만약 interrupt가 없다면, cpu는 1번을 수행하다 write작업을 만났을 때, i/o 커맨드를 날리고 i/o모듈이 4,5를 수행하는 동안 기다리게 된다. 
  • 1-4-5-2-4-5-3-4-5  순으로 작업이 진행되고 4,5가 수행되는 동안 cpu는 쉬게 된다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 인터럽트가 존재한다면 수행 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이라고 한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • program을 순서대로 처리하는 와중에 현재 i에서 작업중인데 interrupt가 들어왔다면 다른 작업으로 흐름이 넘어갔다가 i+1로 돌아와 작업을 마무리한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • fetch -> execute이 완료되면 interrupt가 발생했는지 여부를 확인한다. interrupt를 인식했다면 이전 작업중인 내용을 저장하고 인터럽트를 처리한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 인터럽트를 처리하는 와중에 또 인터럽트가 발생할 수 있다. 이럴때는 인터럽트의 우선순위를 두고 더 높은 우선순위의 인터럽트가 바로 처리될 수 있도록 할 수 있다.
  • 더 높은 우선순위의 인터럽트가 발생했다면 현재 작업을 멈추고 우선처리를 해준다. 반대로 우선순위가 낮다면 현재 작업을 끝내고 나중에 발생한 인터럽트를 처리할 수 있다.
  • 위 그림에서의 우선순위는 다음과 같다. communication > disk > printer interrupt

6. Memory Hierarchy

  • 메모리의 접근 속도, 용량에 따라서 메모리종류는 계층구조를 이룬다.
  • 제일 빠르고 용량이 적은 register, cache, main memory부터 상대적으로 용량이 크면서 접근속도가 느린 disk(secondary memory)를 아래 피라미드 형태로 도식화할 수 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 상대적으로 빠르고 용량이 큰 register만 사용하기엔 금액, 기술적 한계가 존재한다.
  • 따라서 각 계층의 메모리를 섞어서 사용하게 되는데 내가 지금 필요한 데이터가 cache 혹은 main memory에 있다면 비교적 빠른 접근 속도로 데이터 접근이 가능할것이고 반대로 disk에 있다면 읽어오는데 많은 시간이 걸릴 것이다. 
  • 메모리에 대한 평균 접근 시간을 줄이기위해 locality(지역성)의 원리를 활용한다. 대게 앞으로 필요할 데이터는 지금 보고있는 데이터 근처에 있을 확률이 높다는 원리이다. 예를들면 우리가 int arr[10]의 index 1번 데이터를 참조하고 있다면 2번부터 9번을 그 뒤에 사용할 가능성이 매우 크다는 것이다.
  • 지역성의 원리를 활용하여 cpu의 메모리 접근 시간을 줄이는 대표적인 방법으로 cache memory가 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 메모리에서 데이터를 일부 복사해서 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이 마무리 되었는지 결정하게 된다.
    1. cpu가 입출력 명령을 요청
    2. 입출력 모듈이 명령을 수행
    3. 입출력 모듈의 상태 비트 저장
    4. cpu가 주기적으로 상태비트 확인
  • performance가 낮음

8. Interrupt-Driven I/O

  • CPU의 대기를 극복하기위해 나온 방식이다. 
  • I/O 모듈은 준비가 되면 인터럽트를 보내기 때문에 CPU가 반복적으로 장치를 확인할 필요가 없다.
  • CPU 입장
    1. 읽기 명령을 보낸다.
    2. 다음 일을 하나씩 처리한다. 일을 처리할때마다 인터럽트가 왔는지 확인한다.
    3. 만약 인터럽트가 있으면 context를 저장하고 인터럽트를 수행합니다.
  • I/O모듈 입장
    1. 읽기 명령을 CPU로 부터 받았음.
    2. 데이터를 장치로부터 읽어온다.
    3. 데이터를 다 읽어와서 준비가 되었을 때, 프로세서에게 인터럽트 신호를 보낸다.
    4. 프로세서로부터 데이터 요청 명령이 들어올 때까지 기다린다.

9. Direct Memory Access(DMA)

  1. CPU가 읽을것인지 쓸것인지, 장치 주소, 메모리의 주소 정보, 얼마의 데이터를 보낼 것인지의 내용을 DMA에게 전달해준다.
  2. CPU는 다음 작업을 진행한다.
  3. DMA 제어기는 cpu로부터 받은 정보를 바탕으로 데이터를 i/o모듈, 메모리 사이에서 전달해준다.
  4. DMA 제어기의 작업이 끝나면 interrupt를 발생시킨다.

10. Symmetric Multiprocessors

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • 여러 프로세서가 메인메모리, bus, i/o모듈을 공유하는 모양.
  • 수행능력 향상, 소비자의 선택지가 넓어지고 프로세서 하나가 고장나도 동작이 가능하다는 장점이 있다.
  • os가 이 여러 프로세서들에게 효율적으로 일감을 던져줄 수 있어야한다. (스케쥴링, 동기화 기능 중요)

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

  • single chip에 다중 코어, L1, L2, L3 cache가 들어가 있는 모습
728x90
반응형