KOCW 반효경 교수님 운영체제 강의 정리
이 글은 공부한 것을 복습 및 기록하기 위한 게시물입니다.
잘못된 정보가 기입되어 있을 수 있으니 주의해주시기 바랍니다.
강의 링크 : http://www.kocw.net/home/cview.do?lid=3dd1117c48123b8e
1. 동기식 입출력과 비동기식 입출력
동기식 입출력은 I/O Device까지 가서 어떤 일을 하는 지 보고 결과를 가져와서 다음일을 하는 것이다.
동기식 입출력의 구현방법은 2가지다.
- I/O가 끝날 때 까지 CPU 소유권을 가지고 기다리는 것
- CPU 소유권을 빼앗기고 I/O가 끝날 때 까지 block 상태로 있는 것
비동기식 입출력은 I/O Device의 일을 기다리지 않고 다음 일을 하는 것이다.
Input은 보통 동기식이며 Output은 비동기식으로 동작한다.
2. DMA Controller
I/O Device로 인해 CPU가 Interrupt에 걸리는 횟수가 너무나도 많아지게 되며 결국 효율적인 동작을 하지 못하게 된다.
이것을 예방하기 위해 DMA Controller가 존재한다.
DMA Controller는 CPU와 동일하게 직접 메모리에 접근할 수 있는 Controller이다.
CPU와 DMA가 동일한 영역의 메모리를 접근할 수 있는 일이 발생할 수 있다.
그래서 Memory Controlle가 접근 순서를 정하여 예방해주는 역할을 한다.
위에서도 언급했다시피 CPU가 직접 I/O Device의 잦은 Interrupt 동작을 수행하는 것은 너무 비효율적이기 때문에
I/O Device가 CPU가 아닌 DMA에게 Interrupt를 요청하고 해당 I/O Device의 Local Buffer작업이 완료되면
DMA가 직접 I/O Device Local Buffer에 내용을 해당 프로그램 메모리 영역에 Copy를 해준 후 CPU에게 작업완료 Interrupt만 요청하게 된다.
위 그림에서 Controller가 DMA이다.
I/O의 작은 일들은 특정 블록만큼 데이터가 쌓이면 CPU에게 Interrupt를 요청한다.사용자가 키보드 하나 쳤다고 바로 CPU에 Interrupt를 걸면 CPU가 일을 못하게 된다.
Device에서 메모리에 직접 Copy를 하고 그 다음 Interrupt를 한번 걸어서 동작이 완료되는 것을 알린다.
3. 서로 다른 입출력 명령어
I/O를 할 수 있는 방법은 크게 2가지가 있다.
좌측에 있는 방식은 메모리에 접근하는 Instruction과 I/O에 접근하는 Instruction이 따로 있게 된다, 이것이 일반적인 I/O 방식이다.
우측에 있는 방식은 I/O 장치 또한 메모리 주소의 연장 주소로 메모리 Instruction을 통해서만 사용된다.
이것을 Memory Mapped I/O라 한다.
4. 저장장치 계층 구조
위층으로 올라갈수록 속도가 빠르나 단위 공간당 가격이 비싸 용량이 적다.
Secondary(HDD, 테이프)는 비휘발성인 반면 Primary(DRAM, 캐시, 레지스터)는 휘발성이다.
Primary는 CPU에서 직접 접근하는 것이며 Secondary는 CPU가 직접 접근하지 못하는 것이다.
CPU는 Byte단위로 접근이 가능해야 한다.
HDD는 섹터단위의 접근이 필요하여 CPU가 접근하지 못하게 된다.
CPU는 빠르게는 1clock당 instruction을 처리하게 되는데 DRAM은 하나를 처리하는데 많으면 100clock Cycle이 걸리게 되어 매우 오랜 시간이 걸린다.
이러한 속도차이를 완충해주는 것이 바로 캐시 메모리이다.
캐시 메모리는 메인 메모리보다 용량이 작아 당장 필요한 것만 올려 쓰게 된다.
이것을 캐싱이라고 한다.
보통 재사용을 목적으로 사용한다.
5. 프로그램의 실행
어떠한 프로그램을 실행시키게 되면 그 프로그램의 독자적인 Address Space가 형성된다.
Address Space는 Code, Data, Stack으로 구성된다.
- Code : 프로그램의 동작 코드
- Data : 변수와 같은 프로그램의 자료구조
- Stack : 코드의 함수를 호출하거나 리턴할 때 데이터를 쌓거나 꺼내가는 용도
프로그램이 실행될 때 생기는 Address Space를 바로 물리적인 메모리에 올릴 경우 메모리가 낭비가 된다.
실행되는 코드만을 물리적인 메모리에 올리게 된다.
나중에 사용이 되지 않으면 다시 메모리에서 쫓아내어 Disk(Swap Area)에 내려놓게 된다.
File System HDD와 Swap area HDD는 다른 역할을 하게 된다.
File System은 비휘발성이며 Swap area는 휘발성이다.
Address Space의 주소와 물리적 메모리의 주소는 다르게 된다.
이것을 Address translation(주소 변환)이라고 한다.
Address translation은 커널이 하는 것이 아니며 H/W의 도움을 받게 된다.
6. 커널 주소 공간의 내용
커널 또한 일종의 프로그램이다.
그렇기 때문에 커널의 주소공간 또한 Code, Data, Stack으로 구성되어 있다.
코드에는 자원을 관리하는 코드, 시스템 콜, ISR등등의 코드로 구성되어 있다.
Data에는 H/W의 자료구조와 프로그램을 관리하기 위한 자료구조인 PCB등으로 구성되어 있다.
운영체제 또한 함수구조로 코드가 짜여있어 Stack 영역을 사용해야 한다.
여러 사용자 프로그램이 커널의 코드를 쓰기 때문에 커널의 Stack은 사용자 프로그램별로 구성되어 있다.
7. 사용자 프로그램이 사용하는 함수
모든 프로그램은 함수구조로 코드가 짜여져 있다.
사용자 정의 함수와 라이브러리 함수 모두 컴파일 해서 실행파일을 만들면 해당 실행파일 안에 함수가 포함되어 있다.
커널 함수는 사용자 프로그램이 아닌 커널 코드안에 들어 있는 함수이며 사용자 프로그램에서는 호출만 할 수 있다.
커널의 함수는 시스템 콜을 통해서만 사용할 수 있다.
사용자 프로그램의 Address Space와 커널의 Address Space는 영역자체가 다르기 때문에 점프가 불가능 하다.
점프라는 것은 물리적인 메모리가 아닌 프로그램의 논리적인 메모리(가상 메모리)에서 주소를 옮기는 것을 뜻한다.
- User Mode : 사용자 프로그램이 CPU를 가지고 있는 것
- Kernel Mode : OS(커널)가 CPU를 가지고 있는 것
프로그램은 User Mode와 kernel Mode를 반복하다 종료되는 것이다.
'Computer Science > OS' 카테고리의 다른 글
6. Process Management (0) | 2021.03.07 |
---|---|
5. Process 2~3 (0) | 2021.03.06 |
4. Process 1 (0) | 2021.02.27 |
2. System Structure & Program Execution 1 (0) | 2021.02.11 |
1. Introduction to Operating Systems (0) | 2021.02.06 |