Changes in Memory and Registers
왼 편에 있는 그림
- 프로그램이 시작되다가 interrupt가 발생해서 OS가 작업을 시작하는 과정
오른편에 있는 그림
- OS가 interrupt 처리를 다 한 후, 실행했던 프로그램을 다시 실행시키기 위해서 하는 작업
양쪽 그림
- 회색으로 표시된 것 : 메모리
- 메모리의 가장 아래편에 User Program.
- 하늘색으로 표시된 것 : CPU
User's Program
CPU 안의 PC 값 : N+1
따라서 지금은 N번째 명령을 실행하고 있음. (PC의 값은 다음에 실행할 것 같은 명령의 주소를 갖고 있기 때문)
따라서 이 그림은 명령 N번까지 실행을 하고, interrupt가 발생한 상황.
Interrupt Service Routine
Y번째부터 Y+L번째까지
항상 interrupt가 발생을 하면, 어떠한 이유로 interrupt가 발생했는지 확인을 하고, 적절한 interrupt service routine을 불러줌.
지금 N번까지 실행을 하고 발생한 인터럽트를 처리하기 위한 루틴이 Y번째부터 Y+L번째까지 들어있음.
Control Stack
User Program이 실행을 하다가 중단을 하게 되면, 나중에 이 프로그램을 다시 실행시키기 위해서 중단된 지점에서의 CPU의 모든 레지스터 값들을 안전한 공간에 저장을 함.
그 안전한 공간이 바로 control stack임.
따라서 N번째까지 실행을 하고, 중단된 프로그램의 상태를 이 control stack에 저장을 할 것임.
stack pointer의 값 : T
stack은 위로 쌓여가는 것임. 이 T 위쪽에 우리가 현재 실행하고 있던 프로그램의 상태를 저장할 것임
스택이 쌓여갈수록 번지가 작아짐.
(a) interrupt가 처리되기 직전에 해야되는 작업들을 순차적으로 표현한 것
CPU와 Memory 상의 화살표 (4개의 화살표)
순차적으로 일어남
- N+1이라는 PC 값이 control stack에 저장됨
- Y라고 하는 값을 PC에 넣어주는 작업 (Interrupt Service Routine을 시작해야 되기 때문에)
- Y ~ Y+L까지 Interrupt Service Routine 처리
- General Register(CPU에 있는 모든 레지스터 값들을 control에 저장하는 작업)에서 Conrol Stack으로 가는 화살표
- Stack Pointer 변경하는 작업
여기까지 작업이 끝나면 OS는 interrupt 처리를 함.
(b) Interrupt 처리가 끝난 후
Y부터 시작해서 한줄한줄 인터럽트 서비스 루틴을 실행을 했고, 지금 현재 PC의 값은 Y+L+1임 → Y+L 번지에 있는 Return 명령을 실행하고 있다는 뜻
- control stack에서 general register로 오는 화살표(이 작업).
- 인터럽트 처리를 한 다음에 프로그램을 다시 실행을 시키려면 control stack에 저장해놓은 내용들을 CPU 안에 있는 레지스터에 restore해야 함.
- stack pointer에서 T-M의 값을 T로 바꿔줌
- PC의 값을 N+1(아까 실행한 명령의 다음 명령 주소)로 바꿔주는 작업.
- PC에 N+1이 들어가는 순간, OS 작업이 끝나고 User program이 N+1부터 한줄한줄 실행하게 될 것임.
Memory Hierarchy
프로그램은 실행을 하지 않을때는 파일 형태로 하드디스크에 들어있음.
실행을 시작하게 되면 파일 형태로 하드디스크에 들어있던 프로그램의 일부가 메인 메모리로 올라감.
우리가 동시에 실행해야 하는 프로그램은 수십 개, 수백 개인데 메모리의 크기가 한정적이기 때문에, 수백 개의 프로그램이 통으로 다 메모리에 들어갈 수 없음. 공간이 그렇게 많지 않음.
따라서 프로그램을 잘라서 딱 필요한 만큼만 메모리에 집어넣음.
이 프로그램들 중에서 어떤 프로그램이 실행을 한다고 한다면 실행하는 프로그램의 명령이 한 줄씩 CPU안에 있는 Instruction Register로 올라오고, 데이터를 읽어서 실행을 함.
프로그램의 명령 한 줄(데이터 한줄)을 생각해보면 하드디스크 → 메모리 → CPU 안에 있는 레지스터에 들어가서 실행을 함.
register와 main memory 사이에 cache라고 하는 메모리가 하나 더 있음
( 메인 메모리에 들어있는 코드들 중의 일부가 캐쉬로 이동을 하고, 그 중에서 한 줄씩 CPU안에 있는 레지스터로 이동을 해서 실행을 함.)
Memory Hierarchy(프로그램이 이동하는 경로)가 사용되는 이유?
1. amount(capacity) : 용량의 문제
- 하드디스크의 내용을 메인 메모리로 통째로 올려놓기엔 메인 메모리의 용량이 크지 않음
- 메인 메모리의 내용을 통째로 Cache에 올려놓기엔 Cache의 용량이 크지 않음.
2. Speed (access time)
- 하드디스크에서 명령을 실행하기엔 하드디스크의 속도가 너무 느림
- 메인 메모리는 하드디스크보다는 빠르지만 여전히 느림
- 메인 메모리보다 빠른 것이 Cache
3. Expense
- 하드디스크보다 메인 메모리가 더 비쌈
- Cache가 메인 메모리보다 더 비쌈
Going Down the Hierarchy (아래쪽으로 내려갈수록...)
제일 아래쪽에 있는 magnetic tape은 백업할 때나 사용함. 거의 사용하지 않음.
아래쪽으로 내려갈수록 쌈.
그리고 용량이 큼.
But. 아래로 내려갈수록 실행속도가 느림. 자주 access하지 않음.
위로 올라갈수록 속도가 빠른데, 자주 access할 것임. → 그래서 프로그램은 거의 cache에서 실행되는 것처럼 느껴짐 → 상대적으로 굉장히 빠른 속도로 프로그램이 실행되는 것 같은 느낌이 듦.
Locality of reference
배열같이 여러 개의 데이터를이 모여있는 것을 사용하는 것.
관련된 코드들은 서로 뭉쳐있어야 됨.
이런 locality 덕분에 memory hierarchy가 잘 작동함.
Cache Memory
memory hierarchy를 잘 작동하게해주는 요소 중 특히 중요한 것.
- 프로세서(CPU)의 속도는 메모리 속도보다 빠름.
- CPU와 메인 메모리 사이에 속도가 굉장히 빠른 캐쉬 메모리를 둠 → 메인 메모리의 지금 실행하는 명령과 데이터들을 Cache에 집어넣어서 굉장히 빠르게 메모리를 access할 수 있게 만드는 게 Cache. → 이것을 가능하게 하는 것은 프로그램을 작성할 때 locality of reference를 적절히 활용해서 작성하기 때문!
- Cache는 OS에 invisible함.
- OS는 cache를 관리하지 않는다는 뜻. cache는 하드웨어적으로 관리됨
- 메인 메모리와 하드디스크는 OS가 관리함.
(a) Single cache
- 1단계 Cache
- 메모리에서 캐쉬로 한 블락의 데이터가 이동을 함. 내가 필요한 코드 한 줄이 포함된 그 block을 가져옴
(b) Three-level cache organization
- 1단계, 2단계, 3단계 Cache를 사용함
- cache는 main memory에 비해서는 빠르지만 CPU 보다는 느림.
- CPU 쪽으로 갈수록 점점 더 빠른 cache가 만들어지는데 용량은 점점 작아짐
I/O Techniques
1. Programmed I/O
- 제일 처음 I/O 작업을 위해서 사용됨.
- I/O 작업을 하고 싶으면 OS를 호출함. → OS에 있는 I/O 프로그램이 I/O 작업을 함 → I/O Device한테 I/O 작업을 위해서 필요한 정보들을 넘겨줌. → I/O Device한테 작업을 시작 요청 → I/O Device가 작업을 하는 동안 CPU는 놂. → 이 작업이 끝나면 항상 I/O 작업은 잘 끝났는지 or 오류가 발생했는지 확인을 해야 함.
- 이거까지 OS의 I/O 프로그램이 실행을 함.
- 이것이 Programmed I/O 방식
- BUT! I/O 작업을 하는 동안 CPU가 놀아야 함. → 비효율적임.
2. Interrupt-Driven I/O
- I/O 작업을 하고싶으면 OS의 I/O 프로그램이 I/O 작업 준비를 함. → I/O Device에게 I/O 작업을 하라고 지시를 함. → I/O Device가 작업을 하는 동안 CPU는 User Program으로 돌아가서 User Program을 실행을 함. → I/O 작업이 끝나면 interrupt가 걸림 → OS가 interrupt handler 실행하여 I/O 작업이 잘 끝났는지 or 오류가 발생했는지 처리함.
programmed와 interrupt driven의 공통점
두 방식 모두 CPU가 중간에 개입되어 있음.
[ 데이터의 이동 경로 ( 화면 출력, 화면 입력의 경우…) ]
출력하려면 : 메모리 → CPU → I/O 모듈
입력하려면 : I/O 모듈 → CPU → 메인 메모리
3. Drect Memory Access (DMA)
- DMA를 가능하게 하려면 I/O 모듈 안에 DMA 모듈이 따로 있어야 함 or system bus에 DMA 모듈이 붙어있어야 함.
- 명령 자체는 CPU가 분석
- CPU가 일단 명령을 분석한 다음 → 실제 데이터가 이동할 때에는 CPU를 거치지 않고, 메모리에서 I/O 모듈 or I/O 모듈에서 메모리로 바로 이동을 시킴
Direct Memory Access
[ 데이터의 이동 경로 ]
Main memory ↔ I/O 모듈
대량의 데이터가 이동할 때 즉, 파입 입출력에 사용
CPU는 처음 시작할 때 명령을 분석하고, DMA 모듈한테 데이터 이동을 지시함.
CPU가 DMA 모듈한테 알려줘야 하는 정보
- 읽을 것인지 쓸 것 인지에 대한 읽기, 쓰기 operation
- I/O Device의 어디로 데이터를 보낼지 or I/O Device의 어디에 있는 데이터를 메모리로 보낼지.. 즉, I/O Device의 주소
- 메모리의 어디에 있는 데이터를 출력할지 or 입력된 데이터를 메모리 몇 번지에 저장할지.. 즉, 읽고 쓰기를 할 메모리의 시작 주소
- 얼만큼을 보내야 하는지 .. 즉, 데이터의 길이
그 다음부터는 DMA 모듈이 알아서 작업함.
DMA 모듈이 입출력 작업을 하는 동안 CPU는 다른 프로그램을 실행시킬 수 있음
따라서 interrupt-driven I/O or programmed I/O 보다 훨씬 빠르게 실행이 됨
- 처음 시작과 마지막을 CPU가 담당함(관여함) .
- I/O 작업이 무사히 끝나면 DMA 모듈이 interrupt를 걺. → CPU는 OS를 실행시켜서 interrupt 처리를 함
- 데이터가 오고 가는 중간 부분은 DMA 모듈과 메모리 사이에서 작업이 이루어짐.
- 그런데 문제는 system bus가 연결이 되어있다는 것임. 따라서 번갈아가면서 system bus를 사용해야 함
- CPU와 DMA 모듈 사이에 CPU가 우선순위를 가지고 있음. → CPU가 작업을 하는데, instruction이 갈때, 데이터가 갈때 그 사이사이에 DMA 모듈이 system bus를 이용해서 메모리하고 I/O 모듈 사이에 데이터를 옮기는 작업을 함. → BUT 아주 가끔씩 CPU가 기다리는 경우가 생김. 따라서 조금 느려질 수 있음.
Symmetric Multiprocessors (SMP)
CPU의 개수가 늘고 있음. ⇒ 이를 멀티프로세서 시스템이라고 함. ⇒ SMP라고 부름
SMP가 나오기 전, 멀티 프로세서 시스템 중에는 Master & Slave 방식의 멀티프로세서 시스템이 있었음
한 프로세서만 어떤 프로그램을 언제 실행 시킬지 결정하고 다른 프로세서들은 그냥 시키는 대로만 하는 방식을 M&S 방식이라고 함 → BUT, 비효율적임
모든 프로세서가 똑같이 동등하게 OS를 실행시킬 수 있는 권한을 갖는 시스템을 만들었음.
두 개 또는 그 이상의 프로세스가 한 개의 공유된 메모리를 사용하는(공유된 자원을 동시에 사용할 수 있게 된다는 의미) 다중 프로세서 컴퓨터 아키텍처.
⇒ Symmetric (대칭) MP
Figure 1.19
- 프로세서가 여러개고, 각각의 프로세서는 자기 cache를 가지고 있음.
- 여러 개의 프로세서들이 system bus에 연결되어 있음.
- 그러나 메모리가 하나임
- OS는 프로그램이고, 프로그램은 메모리에 들어있음(실행을 하고싶으면). 하나의 메모리에 하나의 OS가 들어있음.
Multicore Computer
CPU들이 하나의 칩 안에 다 들어있는 것. (칩 하나 안에 여러 개의 CPU가 들어있음.)
수백 개의 CPU를 가지는 시스템을 하드웨어적으로 만들어서 사용을 하게 됨.
하드웨어는 엄청나게 빠른 속도로 발전하지만 OS는 그렇지 못 함
'전공 > OS' 카테고리의 다른 글
CH03. Process Description and Control (1) (0) | 2024.04.23 |
---|---|
CH02. Operating System Overview (2) (0) | 2024.04.23 |
CH02. Operating System Overview (1) (1) | 2024.04.23 |
CH01. Computer System Overview (2) (0) | 2024.04.22 |
CH01. Computer System Overview (1) (0) | 2024.04.22 |
댓글