2강. System Structure & Program Execution
CPU의 작동 과정
메모리
CPU의 작업 공간인 메모리에서 매 클럭 사이클 마다 Instruction(기계어)를 읽어서 명령을 수행한다.
CPU의 내부에는 메모리보다 처리속도가 빠른 Register라는 공간이 존재한다.
Register안의 PC 카운터에서는 다음에 수행할 명령어(instruction)를 저장한다.
DISK , I/O
Disk, I/O 장치들은 CPU에 비해 매우 느리기 때문에 일종의 CPU인 device controller라는 것들이 관리해 주게 된다. (device controller는 장치 마다 갖고 있는 하드웨어이다.)
device controller는 각각의 메모리인 local buffer가 있고 수행한 작업들을 local buffer에 적재하게 된다.
이렇게 작업들이 쌓이면 device controller는 CPU에 알려주고(Interrupt) CPU는 일을 처리한다.
메모리의 작업들 중 I/O 장치의 응답을 필요로 하는 모든 요청들은 보안상의 이유로 CPU(운영 체제)를 통해서만 처리 되도록 하고 있다.
I/O device driver는 운영체제의 device의 인터페이스에 맞게 접근하게 해주는 소프트웨어이다.
Timer
메모리에 Instruction이 무한 루프를 돈다면?
무한 루프를 돌면 time sharing같은 다른 작업은 하지 못하고 계속 CPU를 사용하게 되므로 timer라는 것이 있다.
CPU의 독점을 막지 못하게 하는 방법이다.
타이머는 매 클럭 틱 마다 1씩 감소하며 타이머 값이 0이 되면 타이머 인터럽트가 발생한다.
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 안전장치. (예 : 악의가 있는 기능을 포함한 프로그램의 수행)
- Mode bit 값이 1이면 사용자 모드. 사용자 프로그램이 CPU 제어권을 갖고 있다.
- Mode bit 값이 0이면 커널(모니터) 모드. 운영체제가 CPU 제어권을 갖고 있다.
보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 '특권 명령’으로 규정한다.
인터럽트나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꾼다.
DMA 컨트롤러, Direct Memory Access
I/O장치와 CPU의 관계를 중재하는 역할을 한다.
메모리에 CPU와 DMA가 접근하게 해주며 CPU와 DMA가 동시에 접근하는 것을 관리한다.
I/O장치의 인터럽트가 너무 잦기 때문에 중간에서 I/O 장치들의 Local buffer에 적재된 작업들을 메모리에 복사시켜 주는 역할을 담당하고 device controller의 작은 크기(byte 단위)의 일을 블록으로 모아서 직접 전송한다.
작업이 완료되면 CPU에 알려 준다. 인터럽트.
입출력(I/O) 수행
모든 I/O 명령은 앞에서 언급 했던 '특권명령’이다.
사용자 프로그램이 운영체제에게 I/O 요청을 할 때 Mode bit이 0인 커널모드에서만 I/O요청을 처리 할 수 있으므로 시스템 콜(System Call)을 호출한다.
프로그램은 Interrupt line을 추가하고 CPU는 작업을 처리할 때 마다 interrupt line을 체크한다.
인터럽트(트랩)가 있다면 CPU는 I/O 처리를 수행한다.
인터럽트 (Interrupt)
인터럽트 당한 시점의 레지스터와 program counter를 save하고 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
-
Interrupt(하드웨어)
앞에서 Disk나 I/O장치 같은 하드웨어의 응답 요청을 처리할 때
-
Trap(소프트웨어)
Exception : 프로그램 오류
System call : 프로그램이 커널 함수를 호출.
인터럽트 용어에 대해 알아보자
-
인터럽트 벡터
인터럽트의 처리 루틴 주소를 가지고 있다.
-
인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러)
해당 인터럽트를 처리하는 커널 함수
동기식 입출력, 비 동기식 입출력
-
동기식 입출력(Synchronous I/O)
I/O 요청 후 입출력 작업이 완료된 후에 제어가 사용자 프로그램에 넘어간다.
구현방법 1 : 매 시점마다 하나의 I/O만 일어날 수 있어서 CPU의 낭비가 많다.
구현방법 2 : I/O처리를 기다리는 대기줄에 프로그램을 세운다. 그리고 다른 프로그램에 CPU를 할당한다.
-
비 동기식 입출력(Asynchronous I/O)
I/O가 시작된 후에 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다.
프로세스가 다른 일을 동시에 수행할 수 있다.
요청이 끝나면 두 방법 모두 인터럽트를 통해 알려준다.
저장장치 계층 구조
위쪽에 위치할 수록 속도가 빠르고 가격이 비싸진다. 그래서 용량이 작다.
전통적으로 Primary 부분은 휘발성으로 Secondary는 비 휘발성으로 구성한다.
Primary는 CPU가 직접 접근 가능하다고 해서 Executable이라고 한다.
CPU가 접근하기 위해서는 byte단위로 접근이 가능해야 한다.
Main Memory(DRAM)은 가능하다. 하드 디스크는 Sector단위로 접근이 가능하다.
그래서 CPU가 직접 접근할 수 없다.
Caching : 느린 매체의 정보를 빠른 매체로 미리 읽어 놓아서 같은 값을 한번 더 요청 했을 때 빠르게 처리 가능하다.
프로그램의 실행 (메모리 로드)
메모리 로드 과정 : File system → Virtual memory → Physical memory
파일 시스템에 실행 파일(ex: .exe)형태로 저장된 파일이 실행되면 프로그램마다 독자적인 Address Space(주소 공간)이 생기는데 이는 Physical memory가 아닌 Virtual memory이다. 함수 구조인 프로그램의 함수들을 쌓는 공간인 stack, 데이터와 전역 변수 등 프로그램의 자료 구조를 담는 data, 기계어 코드를 담는 code로 구성되어 있다.
Address space은 Physical memory에 다 올려놓는 것이 아니라 메모리의 낭비를 막기 위해 프로그램 수행에 필요한 부분만 올려놓는다.
Swap area는 메모리의 연장 공간의 하드디스크 역할이다.
커널 주소 공간 (Kernel Address Space)
code 공간에는 운영체제가 필요한 기능을 수행하기 위한 코드들이 들어있다.
data 공간에는 하드웨어를 관리하기 위한 자료구조들이 들어있다.
PCB(Process Control Block)은 각 프로세스를 별도로 관리하기 위해 필요한 자료구조이다.
stack 공간에는 프로세스마다 별도의 커널 스택을 두어 관리한다.
사용자 프로그램이 사용하는 함수
-
함수(function)
사용자 프로그램에서 정의한 함수
-
라이브러리 함수
자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
자신의 프로그램의 실행 파일에 포함되어 있다.
-
커널 함수
운영체제 프로그램의 함수
시스템 콜 : 사용자 프로그램이 인터럽트 라인을 통해 커널 함수를 호출하는 것
'ComputerScience > 운영체제' 카테고리의 다른 글
6강. 프로세스 동기화 (0) | 2018.09.12 |
---|---|
5강. CPU Scheduling (0) | 2018.09.12 |
4강. Process Management (0) | 2018.09.12 |
3강. 프로세스 (0) | 2018.09.12 |
1강. 운영체제 소개 (0) | 2018.09.12 |