OS

[OS] 정리1

Binceline 2018. 9. 21. 01:32

OS의 정의

User 입장에서 OS :용이성과 성능을 위한 프로그램

시스템 입장에서 OS : 자원 할당과 제어를 위한 프로그램


기본 구조

- CPU 및 디바이스 컨트롤러(I/O 컨트롤러)들은 공유 메모리에 엑세스하며 버스를 통해 연결됨

- I/O 디바이스와 CPU는 동시 실행이 가능

- 각 디바이스 컨트롤러는 Local Buffer를 가짐

- CPU는 메인 메모리와 Local Buffer 간의 데이터를 송/수신

- I/O란, 디바이스로부터 컨트롤러의 Local Buffer까지의 데이터 전송

- 디바이스 컨트롤러는 Interrupt를 발생시킴으로써 CPU에게 작업이 완료되었음을 알림


I/O 컨트롤러

- CPU를 대신하여 I/O를 관리하며 실제로 I/O 명령을 수행

- 내부에 Register와 Data Buffer가 존재.

- Bus(Address Bus / System Bus)를 통해 Read/Write 명령을 수행하여 CPU와 통신


CPU가 I/O 컨트롤러의 Data Buffer에 데이터를 채운 후 Write 명령을 수행하면, I/O 컨트롤러는 사용 가능한 상태인지 확인한 후 작업을 수행. 작업이 끝나면 Interrupt를 발생시켜 CPU에게 작업이 완료되었음을 알림.


인터럽트의 기능

- 일반적으로, 인터럽트는 인터럽트 벡터를 통해 제어를 Interrupt Service Routine 또는 Interrupt Handler에 전송

(인터럽트 벡터(영어: interrupt vector)는 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간이다. 인텔 아키텍처에서는, 가상메모리를 사용하지 않았던 386이전에는 주로 Main Memory의 0번째에 위치하였으나, 이후부터는 IDT(Interrupt descriptor table)의 형태로 바뀌었다.)

- 인터럽트 핸들러는 OS의 일부

인터럽트 아키텍처는 인터럽트 된 명령어의 주소를 저장해야 함

- Trap (또는 예외)은 오류 또는 사용자 요청으로 인해 소프트웨어에서 생성 된 인터럽트 (0으로 나누기, 페이지 폴트 등)


Storage 구조

- Main Memory : CPU가 직접 엑세스할 수 있는 대용량 저장 장치

- 2차 저장소 : 비휘발성 저장소 용량을 제공하는 Main Memory의 확장

- 자기 디스크 : 자기 기록 물질로 덮힌 단단한 금속 또는 유리 플래터. 디스크 표면은 섹터로 세분화되는 트랙으로, 논리적으로 나뉘어짐. 디스크 컨트롤러는 장치와 컴퓨터 간의 논리적 상호 작용을 결정


메모리 계층 구조


CPU가 메모리에 더 빨리 접근하기 위해 나눈 구조(속도, 가격, 휘발성을 고려)

- Register와 Cache는 CPU 내부에 존재. 

- Register는 연산을 위한 저장소

- Cache는 CPU와 RAM 사이의 중간 저장소

- Main Memory는 CPU 외부에 있지만 CPU의 Cache와 연결됨.

- 그외 디스크들은 CPU가 직접 접근할 수가 없기 때문에, 데이터를 Main Memroy로 이동시키는 과정이 필요

*CPU가 빠르게 데이터에 접근하기 위해서는 데이터를 저장하는 메모리가 작아야 한다. 실제로 레지스터는 캐시보다 더 작은 용량을, 캐시는 메모리보다, 메모리는 하드 디스크보다 더 작은 용량을 가진다. 메모리 구조 그림1에서는 위 즉 높은 속도에 있는 장치가 더 작은 크기를 차지하는 방식으로 이를 표현했다.


메모리 엑세스 구조

메모리 속도에 가까운 속도로 정보를 전송하기 위해 고속 I / O 장치에 사용됨

- 디바이스 컨트롤러는 CPU 개입없이 버퍼 블록에서 데이터 블록을 직접 주 메모리로 전송함

- 바이트 당 하나의 인터럽트보다는 블록 당 하나의 인터럽트만 생성됨


일반적인 OS 구조


- 시스템에 있는 Job들은 메모리에 유지된다.

- 스케줄링을 통해 하나의 Job이 선택된다.

- I/O가 발생하면, OS는 다른 Job으로 컨텍스트 스위칭을 한다.

- 시 분할(멀티 태스킹)시스템은 CPU가 스위칭을 자주 수행하는 방식이다.

- User는 메모리에서 적어도 하나의 프로그램을 실행한다. -> Process

- 만약, 모든 Job들이 동시에 실행할 준비가 되었다면, 스케줄링 수행

- 만약 프로세스들이 메모리에 맞지 않으면, Swapping을 수행

- 가상 메모리는 RAM이 부족한 경우에도 프로세스들을 실행할 수 있도록 해줌


OS는 어떤 프로그램에 의해 다른 프로그램이 오류가 발생하는 경우가 없도록 설계되어야 한다.

- Dual Mode Operation (커널 / 유저)

- I/O 보호

- Memory 보호

- Timer


Dual Mode Operation은 운영체제가 자체적으로 시스템 구성을 보호할 수 있도록 Dual Mode로 작동하도록 한다.

- User Mode / Kernel Mode로 나뉘어짐

- 하드웨어에 의해 제공되는 Mode Bit

- User Code / Kernel Code가 실행될 때를 구분하는 기능 제공

- 일부 명령들은 커널 모드에서만 실행 가능하도록 하는 권한을 가진다.

- System Call은 User Mode를 Kernel Mode로 바꾸고, 작업이 종료될 때 유저 모드로 다시 전환한다.


I/O Protection

 유저가 잘못된 I/O 명령을 직접 시도할 수 있다면(I/O register를 User Mode에서 직접 다룰 수 있다면) 오류가 발생할 가능성이 높아지고, 이는 OS의 정상적인 동작을 방해할 수 있다. 그래서 유저가 직접 수행하지 못하도록 I/O 명령을 모두 Privileged Instruction으로 만들어서 Kernel Mode에서만(커널이 대신) 수행할 수 있도록 한다.

- 모든 I/O 명령은 권한이 존재한다.

- 유저모드 실행 불가 -> 커널에 요청하여 커널 모드에서 작동


Memory Protection

인터럽트 벡터와 인터럽트 서비스 루틴에 대해 메모리 보호를 제공해야 한다.

- 메모리 보호를 위해 프로그램이 엑세스 가능한 주소 범위를 결정하는 두 개의 Register를 추가한다.

- Base Register : 유효한 최소 물리 메모리 주소

- Limit Register : 크기

이렇게 함으로써, 정의된 범위를 벗어난 메모리가 보호된다.

해당 범위 밖이라면 운영체제에게 오류를 알린다(Trap)


Timer

- 지정된 기간이 지나면 인터럽트를 발생시킴

- 매 Clock Tick마다 Timer가 감소

- Timer가 0이 되면 인터럽트 발생

- 보통 시간 공유를 구현하는 데에 사용됨

- 현재 시간을 계산하는 데에도 사용

- Load-Timer는 Privileged Instruction


System Call

- OS에 의해 제공되는 서비스에 대한 프로그래밍 인터페이스

- 응용프로그램에서 운영체제에게 커널 기능 수행을 요청하는 방법. 즉, 유저 프로세스가 소프트웨어 인터럽트를 통해 커널의 기능을 이용하기 위한 서비스를 요청하는 방법.

- 일반적으로 High-Level Language로 구현됨

- 어플리케이션을 통해 프로그램에서 엑세스(Windows API, Posix API 어플리케이션 혹은 JVM 등등)


System Call Interface

- 각 시스템 콜에는 번호가 할당된다.

- 시스템 콜 인터페이스는 이 번호에 대해 인덱스되는 테이블을 가지고 있는데, 다음과 같이 동작한다.

어떤 프로세스가 실행되고 있다면, 기본적으로 User Mode로 동작한다. 이 때, I/O Instruction을 사용하려 한다면(Privileged Intstruction이므로) 소프트웨어 레벨에서 인터럽트를 걸어, Kernel Mode로 변경해 주어야 한다.


종종 System Call이 발생할 때 많은 정보가 필요할 수 있는데, 일반적으로 3가지 방법이 존재한다.

1. 레지스터에 그대로 매개변수를 전달 : 레지스터 수보다 매개변수가 더 많을 수 있음

2. 매개변수들을 메모리 블록에 저장하고, 해당 블록의 주소를 레지스터에 전달 : Linux와 Solaris가 사용하는 방법

3. OS에 의해 Stack에서 Pop되거나 프로그램에 의해 Stack에 Push되는 방식

2, 3번째 방법은 매개변수의 수가 제한되지 않는다.


Types of System Calls

- 프로세스 제어

- end / abort

- load / excute

- create / terminate process

- get / set process attributes

- wait for time

- wait / signal event

- allocate / free memory

- 파일 관리

- create / delete

- open / close

- read / write / reposition

- get / set file attributes

- 장치 관리

- request / release device

- read / write / reposition

- get / set device attributes

- attach / detach devices

- 정보 관리

- get / set [time / date / process / file / device] attributes

- 통신

- create / delete communication connection

- send / receive messages

- transfer status info

- attach / detach remote devices


커널에서 사용되는 자료구조

- Stack

- Queue

- List (Singly / doubly / circularly)

- Tree

- Hash Function

- Bitmap


System Boot (간략)

1. 전원

2. BootStrap Loader가 저장되어 있는, 지정된 메모리(ROM에서)를 읽고 코드를 실행(부트스트랩에 실행 코드가 작성되어 있음)

-> 커널 로딩


운영체제 기능

- User Interface

- CLI 및 GUI 제공

- 프로그램 실행

- 프로그램을 메모리에 로드하고, 실행하며, 정상/비정상적으로 종료할 수 있음

- I/O 연산

- 실행된 프로그램은 I/O가 필요할 수 있는데, 이는 파일 또는 I/O 장치도 포함됨

- File 조작


통신

- 프로세스는 네트워크를 통해 컴퓨터 혹은 프로세스간에 정보를 교환할 수 있음

- Shared Memory 혹은 메시지 전달을 통해 이루어짐

- 오류 감지

- CPU, 메모리, I/O 장치, 유저 프로그램 등에서 발생

- 각 오류에 대해 정확하고 일관된 처리를 보장


자원 관리

- 자원 할당

- 여러 유저들 또는 여러 Job들이 동시에 실행되고 있을 때, 각각 자원을 할당시켜 주어야 함

- Accounting

- 어떤 유저가 얼마나 많은 자원을 사용하는지 추적해야 함

- Protection / Security

- 프로세스 간에 서로 간섭하지 못하도록 해야 함

- 자원에 대한 모든 접근 제어를 보장하는 것을 수반해야 함


OS의 구성 요소

- 프로세스 / 스레드 관리

- 프로세스 동기화

- 메모리 관리

- 가상 메모리 관리

- 파일 시스템 관리

- 저장소 관리

- I/O 관리

- Protection / Security


Unix는 시스템 프로그램 / 커널로 구성됨.

커널

- 물리적 하드웨어부터 시스템 콜 인터페이스까지

- 파일 시스템, CPU 스케줄링, 메모리 관리 등을 제공

반응형

'OS' 카테고리의 다른 글

Context Switching에서의 Thread와 Process의 관계 + PCB, TCB  (2) 2020.05.30
컴퓨터 자원의 구조와 동작, RAM과 Disk에 대해  (0) 2020.05.26
[OS] 정리7 : 가상 메모리  (0) 2018.09.27
[OS] 정리6 : 메모리 관리  (0) 2018.09.26
[OS] System call, Interrupt, Trap, 등  (1) 2018.09.24
[OS] 정리5  (0) 2018.09.24
[OS] 정리4  (0) 2018.09.24
[OS] 정리3  (0) 2018.09.24
[OS] 정리2  (0) 2018.09.23
pintos information  (0) 2014.02.13