ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 💻 [OS 오퍼레이팅시스템] #2 | Computer System Overview 2
    CS/OS 2022. 4. 15. 11:26

     

     


     

    💻 인터럽트

    - Interrupt 

    인터럽트 : CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요한 경우CPU에게 알려 처리할 수 있도록 하는 것을 말한다. 목적은 프로세서의 utilization 향상이다.

    대부분 I/O 디바이스들은 프로세서보다 느릴 수 있기에 프로세서는 디바이스를 기다릴 수 밖에 없다. 그래서 프로세서의 낭비가 발생하는데 이걸 해결하는 방식이다. 인터럽트 발생하면 Interrupt Handler가 관여한다.

     

    - Interrupt Mechnism

    인터럽트는 instruction 끝날 때마다 체크.

    인터럽트가 있다면 PC <- Intr 핸들러 주소, 없다면 PC <- PC++ 또는 PC+4 (하여튼 다음주소로 가서 순차적 처리) 또는 HALT(정지)

     

    운영체제의 듀얼모드 : user모드커널모드 (interrupt 발생하면 유저모드에서 커널모드로 스위치)

     

    1. Save PC, PSW (다시 돌아가기 위해)

    2. PSW <- Kernel mode, INTR disable(처리 중에는 다른거 잠시 무시)

    3. PC <- interrupt handler (핸들러 주소로 감)

     

    ISR (Interrupt Service Routine) : 핸들러의 부분집합으로 디바이스 interrupt에 특화된 함수 (

    ex. timer_interrupt(), mouse_interrupt(), disk_interrupt())

     

    - Interrupt Processing

    하드웨어 :

    1. PIC에 연결된 디바이스가 Intr 발생

    2. CPU가 현재 instruction 끝냄

    3. CPU가 Intr 시그널을 깨달음

    4. 프로세서가 PSW와 PC(중요한 레지스터들)를 control stack에 넣음

    5. 프로세서가 interrupt 관련 새로운 PC값을 로드한다.

    소프트웨어 :

    6. 프로세스 상태정보를 스택에 저장 (Save all)

    7. 프로세스 interrupt 처리 (ISR), 실제 디바이스 제어 명령

    8. 스택에 있던 기존 state 불러옴 (Restore all)

    9. 오래된 PSW와 PC를 불러온다.

     

    - Memory와 Registers 변화

    Intrt 발생 시 메모리와 레지스터 상태 변화 (핸들링 전/후)

     

    - Interrupts and Exception

    Interrupts : 비동기 인터럽트. 다른 H/W 디바이스 통해서 발생. 주변기기에서 발생하는 외부 인터럽트

    Exception : 동기 인터럽트. CPU에 의해서 발생하는 내부 exception(0으로 나누는 상황 같은거). 시스템 콜 포함. intr로 통용해서 말함. 

    Interrupt Exception
    cause : external to CPU cause : CPU internal (현재 명령 실행 중에 발생)
    Asynchronous to CPU clock (비동기) Synchronous to CPU clock (동기, 바로바로) 
    현재 명령 끝낸 뒤 현재 명령 안 끝내도 중간 decode나 fetch단계에서 가능
    e.g. I/O devices, timer e.g. Program -> 잘못된 opcode, 잘못된 주소접근, 0으로 나눔

     

    exception 처리

    퀴즈

    더보기

    1. interrupt 발생 시 하드웨어에서 일어나는 과정 (위에 있던 그림 참고)

      instruction 끝낸 뒤 interrupt 시그널 있을 경우 현재 PC와 PSW 레지스터를 스택에 저장, PSW는 커널모드로 전환. 다른 Intr   disable, PC는 Interrupt 핸들러 주소로.

    2. PIC 기능 2가지 

      다양한 디바이스로부터 Intr 왔을 때, 벡터로 변환 가능

      우선순위에 따라 Intr 제어하는 programmable한 기능

     

    - Program Flow of Control Without and With Interrupts

     

    - Multiple Interrupts

    다수의 인터럽트 왔을 때 처리방식 2가지

    Sequential Interrupt processing : 인터럽트 진행 중일 때, 요청오는 인터럽트 무시. 진행중이던 인터럽트 끝나면 pending인 인터럽트들 순차적으로 처리. (장점 : 단순하고 쉽게 구현할 수 있다. cheap. 단점 :우선순위나 time=critical needs를 따지지 않는다.)

    Nested interrupt processing : 중첩처리방식. 인터럽트 우선순위 따짐. 인터럽트 처리하다가 우선순위 더 높은 인터럽트 요청오면 바로 우선순위 높은 인터럽트 처리. (그때, 처리하던 중이였던 인터럽트 control stack(Interrupted Stack)에 push) 구현 더 어렵고 expensive

     

    - Interrupt Mechnism 장단점

    단점 : 핸들러에서, 레지스터를 저장하고 다시 불러오는 등의 추가적인 코드, 시간, cost가 소요된다. 

    장점 : 그럼에도 불구하고, 프로세서가 더욱 효율적으로 일한다. 왜냐면 I/O를 기다리느라 낭비했던 시간이 사라졌으니까.


    💻 메모리 계층구조

      캐시 메인 메모리 디스크 메모리
    속도 <10ns <100ns <10^7ns (10ms)
    크기 MB GB TB

     

    - Virtual Memory Technology

    속도는 상위레벨  + 사이즈와 cost는 하위 레벨. 없지만 있는 것처럼 제공(illusion)

    예를 들어, 캐시의 속도를 가지고 메인메모리의 크기를 가짐.

     

    - locality 지역성

    Temporal locality (locality in time) 시간지역성 : 한 번 참조되면, 다시 참조될 가능성이 높다.

    Spatial locality (locality in space) 공간지역성 : 한 아이템이 참조되면, 가까이 있는 아이템들이 참조될 가능성이 높다. (ex. 배열)


    💻 캐시 메모리

    - Goal

    SRAM의 시간을 가지고, DRAM의 size와 cost를 가지는 virtual memory technology를 제공한다.

    SRAM : small, fast, expensive + DRAM : large, slow, cheap   (상위 SPEED + 하위 COST)

    프로세서에 의해 소비되는 메모리 bandwidth 감소, ISA 변경할 필요 없음.

    캐시 종류 다양함(Virtual Memory, Network buffet cache, Disk cache, Browser cache)  + 과정 강의 영상으로 보기

     

    - Cache

    메인 메모리 (lower level) : M  blocks = 2^n / K  (K : word)

    캐시 (upper level) : C slots (called line) C << M 각 블럭 length는 K words.

    Tag : placement 디자인방법, 어떤 블록이 어디에 저장되어 위치하고 있는지. 매핑.

    (ex. M=16, C=4 -> M%C : 0,1,2,3이 태그)

     

    Hit : 필요한 블럭이 캐시에 있을 때 (upper level에 있을 때)

    Hit Rate = upper level에서 발견되는 접근 비율

    Hit Time = upper level에 접근하는 시간

    Miss : 필요한 블럭이 캐시에 없을 때 (lower level에 있을 때) -> 메모리로부터 fetch되고 캐시에 저장된다.

    여기서 캐시에 저장될 때, Placement policy(캐시의 어디에 위치할지 결정), Replacement policy(캐시의 뭐를 대체 할지)

    Miss Rate = 1 - (hit rate)

     

    - 예시문제

    더보기
    Hit, Miss 관련 Average time 구하는 예시문제

     

    - Cache Organization 

    Mapping Function : 위치 결정

    1) Direct Mapped Mapping : 메인 메모리 캐시의 싱글 라인에 할당. no repliacement policy. 구현쉽고 hit rate 낮아질 수도

    2) N-way Set Associative Mapping : 하나의 set이 n개의 블럭 저장. 위의 Directed Mapped Mapping은 1-way set associative mapping이다.

    3) Fully Associative Mapping : 완전 무작위

     

    * S는 set의 개수, B는 블럭 사이즈, N은 각 set의 캐시블럭 수

    * cache size = S X N X B data bytes

     

    - 예시그림

    더보기
    Directed Mapped

     

    2-way set-associative

     

    - Cache Read 

     

    - Cache Write

    Write-through : 동시에 함께 저장. 캐시와 메인메모리에 둘 다 write. simple하지만 느리다. 메모리 traffic이 증가한다(버퍼 필요)

    Write-back : 캐시만 업데이트한다. dirty 블럭이 대체되면(블록 단위에 캐시로부터 해제되는 때(캐시안에 있는 내용을 버릴시)에만 그 때 메인메모리를 업데이트한다(dirty bit 필요). 빠르지만 복잡하다. consistency 문제를 일으킨다.


    💻 I/O 통신 기술

    - I/O Device Overview 

    I/O 컨트롤러는 I/O 디바이스에게 인터페이스를 제공한다.

    Interface : 시스템 소프트웨어가 이 수행을 제어할 수 있도록 허락한다.

    Internals : 기능 구현에 책임이 있다.

     

    컨트롤러는 버스에 최소 3개의 주소(ports)가 있다. 각각 컨트롤러에 상응하는 레지스터가 있다.

    Status register :  디바이스의 현재 상태를 보여주기 위해 읽는다.

    Control(Command) register : 특정 task를 수행하라고 디바이스에게 알려준다.

    Data register : 데이터를 디바이스에게 전송하거나 디바이스로부터 데이터를 가져온다.

    더 복잡한 장치는 다중의 contro 레지스터와 status 레지스터를 갖는다.

     

    - I/O Address Space 

    address 집합. address 갖는 방법 2가지이며 두 방법 같이 사용 가능

    Port-mapped I/O (I/O instructions) : 디바이스들은 메인 메모리와 분리된 주소 집합을 가진다. in, out과 같은 새로운 특정 명령어를 필요로한다.

    Memory-mapped I/O : 메모리와 I/O 디바이스들이 같은 주소 집합을 사용한다. load, store와 같은 표준 명령어 수행 가능.

     

    - Simple I/O Communication 

    While (STATUS == BUSY)
    	; // 디바이스가 바쁘지 않을 때까지 기다린다
    Write data to DATA register
    Write command to COMMAND register
    	// Doing so starts the device and executes the command
    While (STATUS == BUSY)
    	; // 디바이스가 요청에 따른 수행을 끝낼 때까지 기다린다

     

    - Programmed I/O 

    Polling I/O : Synchronous I/O. I/O모듈의 상태를 반복적으로 체크.

    1. 호스트(CPU)가 I/O모듈에게 읽기(read) 명령을 내린다.

    2. 컨트롤러가 command register을 읽고 읽기(read) 명령을 본다.

    3. 호스트는 반드시 끝날 때까지 status-checking loop에 반복적으로 머물러야한다.

    4. 호스트가 I/O모듈로부터 읽고, 메모리에 word를 쓴다(write)

    step 3 -> buisy-wait cycle : 디바이스로부터 I/O를 위해 기다리는 사이클. 디바이스가 빠르면 효율적. 느리면 비효율적. 만약 CPU가 다른 task로 바꾼다면, 데이터를 잃는다.

     

    - Interrupt-Driven I/O

    Asynchronous I/O. I/O 컨트롤러의 시작과 끝에만 관여하는 방식. I/O가 완료되면 I/O 컨트롤러가 CPU에게 비동기적으로 완료됨을 알려주는 방식이다. CPU의 대기를 극복하기위해 나온 방식으로, 장치를 확인하기 위한 CPU의 반복작업을 필요로 하지 않는다. 

    I/O모듈에서 메모리로 가는 모든 데이터(word)는 반드시 프로세서를 통해서 간다.

     

    - DMA (Direct Memory Access) 

    큰 데이터에게 효율적(block). I/O 디바이스와 메모리 사이의 직접적인 전송. CPU는 DMA에 전송되어야 할 block의 시작과 도착주소, read 또는 wirte 명령어, 크기(바이트의 수)를 보낸다. 이게 command block.

    블럭을 모두 옮긴 후, DMA 모듈이 CPU에게 인터럽트를 발생시킨다. DMA가 블럭(데이터) 옮기는 동안 CPU 개입이 없다.

     

    - I/O Communication Techniques 

    3가지 기술

    Programmed I/O (Polling) : I/O 수행이 끝날 때 까지, 프로세서가 주기적으로 I/O 모듈 상태 체크한다.

    Interrupt-driven I/O 입출력 모듈은 준비가 되면 인터럽트를 보내도록 한다. 데이터가 준비가 되었을 때, 프로세서에 인터럽트 신호를 보내도록 한다.

    DMA(Direct Memory Access) : 큰 데이터를 효과적으로 보냄. 블럭단위 수행 후 Intr발생. CPU 개입 최소화. I/O 컨트롤러가 직접 그 메모리에 접근해야한다.

     

    - 예시 과정 그림

    더보기

     

    interrupt-driven i/o

     

    3개 방법 비교

     


    💻 SMP (Symmetric Multi-Processor)

    - Advanced PIC(APIC) for SMP 

    SMP : 대칭적 다중 처리기. 다수의 프로세서가 협업해서 하나의 프로그램을 수행하는 시스템.

    요구사항 : shared memory 다수의 프로세서가 메모리 공유하고 있어야 함.

    APIC은 어떤 CPU에게 일을 시킬 것인가 선택해야한다(selects a CPU) 또한, 상응하는 local APIC에게 시그널을 보낸다.

    Local APIC (LAPIC) : SMP의 각 CPU당 한 개. Timer(하드웨어) interrupt. 모든 LAPIC은 external APIC과 연결됨.

     

    * PIC : 외부 디바이스 관리 Intr 컨트롤러. vector로 변환해주고 우선순위 등 pragrammable한 기능이 있다.

     

    SMP, APIC, LAPIC