운영체제

[운영체제(OS)] 3. 컴퓨터 시스템 (Computer System Overview 2)

용성군 2021. 7. 23. 11:12
728x90
반응형

Memory Hierarchy

가장 이상적인 Memory는 용량이 크면서 빠른 Memory일 것이다. 하지만 현재까지는 이런 메모리는 존재하지 않아 우리는 이상적인 메모리의 효과를 낼 수 있도록 해야한다. 

 

메모리의 계층구조

메모리 계층 구조가 올라 갈수록 다음과 같은 특징을 가진다.

  • 접근 시간이 빨라진다.
  • 용량이 작다.
  • 비트당 비용은 비싸다. 

계층 구조가 낮아질수록 

  • 비트당 비용이 싸다.
  • 접근시간이 증가한다.
  • 프로세서에 의한 메모리 접근빈도가 감소한다(Cache에 올려놓고 사용하기 때문에).

Cache Memory

Cache란 Main memory와 CPU 사이에서 존재하는 메모리이다. Main Memory에서 data를 가져오기 전 CPU가 Cache에 원하는 data가 있다면  빠르게 접근해 가져올 수 있는 작은 메모리이다. Cache가 없다면 CPU가 실행할 수 있는 instruction들의 속도는 Main Memory cycle에 의해 결정된다(Main Memory의 cycle은 Cache보다 느려 Cache가 없다면 processor가 느리게 동작하게 된다). 따라서 Processor와  Main memory 사이에 작고 빠른 메모리인 Cache를 제공하고 여기에 지역성(Locality)을 이용해 data를 넣어놓고 사용한다. Cache에는 Main memory의 일부분을 복사해서 가지고 있는다. Processor는 먼저 cache에 내가 원하는 data가 있는지 확인하고 만약 없다면 Main memory에서 내가 원하는 data를 포함하는 block크기만큼 cache로 옮겨 사용한다. 

 

CPU와 Main memory사이에 Cache가 존재하고 data가 Word와 Block단위로 움직인다는 것을 나타내고있다.

 

왼쪽의 Cache는 Main memory에서 받은 data를 Block 단위로 가지고 있고 오른쪽의 Main memory는 여러개의 Word를 Blcok으로 묶어 Cache로 전달해 준다. 여기서는 K개의 word가 1개의 Block이라고 표현하였다. 


Cache Design

Cache size :  Cache를 작게 만들어도 performance(속도) 향상에 큰 영향을 준다.

 

Block size(Main memory에서 cache로 data를 가져오는 크기) : block 크기가 크면 클수록 hit ratio(Processor가 cache에서 data를 가져올 확률)가 높아진다. 하지만 너무 크기를 키우면 다시 사용할 data를 cache 밖으로 내려야하기 때문에 적당한 크기가 되어야 한다. 

 

Mapping function :  Cache에서 Block의 위치를 결정하는 함수를 디자인해야 한다. ex) Direct map cache, set-associative cache

 

Replacement Algorithm : 어떤 block을 cache 밖으로 뺄 것인가 결정해야한다. ex) Least-Recently-Used (LRU) 알고리즘

 

Write policy : multicore또는 multiprocessor 시스템에서 cache coherence 문제를 고려해야한다. 또한 main memory에 write연산을 최소화 하는것이 중요하다(main memory에 접근하는 것은 매우 느리기 때문이다).

다음은 write policy의 두가지 방법이다. 

  1. cache의 block이 수정될 때마다 main memory에 값을 바꿔준다(write through).
  2. cache의 block이 main memory로 내려갈 때만 값을 바꿔준다(write back).

Cache Coherence : 여러개의 processor가 cache의 같은 data를 접근할 때는 같은 값을 접근해서 사용해야한다는 것이다.

예시
cache 1번지에 0이 적혀져 있었다. 한 processor가 1을 적었는데 다른 processor는 이전의 값 0을 사용하면 안된다는 의미이다.

Disk Cache

Main memory의 부분을 buffer로 사용해서 disk의 data를 저장하는 기술이다. disk에서 읽는 것 보다 빠르다.


Computer System Organization

  • 먼저 우리가 알고 있는 I/O device와 CPU사이에는 공통된 bus(데이터 통로)를 통해 shared memory로 연결된다.
  • 이런 공유 메모리(shared memory)에 CPU와 I/O 장치들이 경쟁적으로 동시에 접근한다.
  • 각각의 장치들은 local buffer를 가지며 CPU는 memory와 local buffer 사이에 data를 옮긴다. 
  • "I/O가 발생한다"의 의미는 device에서 controller의 local buffer로 data가 이동한다는 뜻이다. 
  • Device controller는 작업이 끝나면 Interrupt를 이용해 CPU에게 알린다. 그러면 CPU는 3번째 부분과 같이 memory와 local buffer 사이에 data를 옮겨쓴다. 

CPU입장에서는 다양한 device 장치들이 memory에 접근하는것을 믿을 수가 없기 때문에 memory관리는 OS를 수행하는 CPU가 담당한다. 

 

 

 


Programmed I/O

I/O의 모든 과정을 processor가 관여하기 때문에 programmed I/O라고 한다. Processor는 연산이 끝날때까지 상태를 체크하며 I/O는 I/O 모듈이 수행하는것이다.

  1. Read command를 I/O 모듈에게 명령한다.
  2. Processor는 I/O 모듈의 상태를 읽는다.
  3. 준비가 되지않았다면 2번과정을 Processor는 반복한다.
  4. 준비가 되었다면 I/O 모듈은 Read 명령어를 수행하고 I/O 모듈로부터 word를 읽어온다.
  5. Processor는 memory에 word를 쓴다.


Interrupt-Dirven I/O

위의 과정은 processor가 I/O의 모든과정을 참여하기 때문에 비효율적이다. 따라서 I/O module이 data를 교환할 준비가 되었을 떄 processor는 interrupt 되어진다.

Interrupt 발생 시 Processor는 실행중인 프로그램의 현재 context를 저장하고 interrupt handler를 실행한다. 

 

  1. Processor는 Read command를 I/O 모듈에게 명령한다. (이후 processor는 다른 일을 한다)
  2. I/O 모듈의 상태가 준비되었다면 processor에게 interrupt를 보낸다.
  3.  I/O 모듈은 Read 명령어를 수행하고 I/O 모듈로 부터 word를 읽어온다.
  4. Processor는 memory에 word를 쓴다.

하지만 1000 word를 모두 Read 하려면 1000번 모두 cpu가 관여(memory에 쓰는 행위)를 해야하기 때문에 이 또한 비효율적이다.


Direct Memory Access

I/O는 직접 메모리에 접근하여 쓰거나 읽을 수 없다. 따라서 DMA controller를 만들어서 memory에 쓰도록 하면 Processor는 다른일을 할 수 있다.

Processor는 DMA controller에게 Read command를 부탁하면 위의 모든과정을 DMA가 한다. 

그리고 Memory에 쓴 후 Processor에게 다 썼다고 Interrupt를 보내주면 된다. 


Computer Startup (컴퓨터 실행)

우리가 컴퓨터 전원을 키면 어떤일이 발생하는지 간략하게 작성하도록 하겠다.

 

컴퓨터를 키면 DRAM등 하드웨어를 체크한다.

그 후 ROM 또는 EPROM에 저장된 bootstrap program(firmware라고 불림)이 실행되면서 하드웨어를 초기화한다.

이 과정이 끝나면 OS를 메모리에 올린다. 

 

 

모르는 부분이 있다면 댓글을 적어서 남겨주시고 틀린 부분이나 수정해야할 부분이 있다면 말씀 부탁드리겠습니다!

728x90
반응형