운영체제(OS)

Operating Systems 1. Introduction

아뵹젼 2021. 10. 10.

Computer System Structure

컴퓨터 시스템은 새가지 요소로 나눌 수 있다.

1. Hardware - CPU, 메모리, 입출력장치

2. Operating system (kernel) - 커널은 운영체제의 핵심으로, 운영체제와 커널은 동일시 된다. 하드웨어와 어플리케이션, 사용자간의 매개체 역할이다.

3. Application programs - 웹 브라우저, 비디오 게임 등

 

 

Computer Startup Process

컴퓨터를 키거나 재부팅 할 때 부트스트랩 프로그램이 실행된다. 이 프로그램은 보통 ROM이나 주로 펌웨어라고 알려져 있는 EEPROM 에 저장되어 있다.  부트로더는 시스템의 모든 부분을 초기화하고, 운영체제의 커널을 적재하고 실행시킨다.

 

즉, 컴퓨터의 전원이 켜지면 ROM에 있는 Bios 가 로드되고, 실행된 BIOS 는 POST(power on self test) 라는 주변 하드웨어(CPU, memory, bus..) 를 체크하는 작업을 한다. 그런 다음 부팅매체를 선택하고, 부팅 매체의 MBR 에 저장된 부트스트랩을 실행한다. 마지막으로 RAM 에 부트로더가 올라가고, 부트로더는 OS를 복사해 메모리에 붙여서 OS가 실행된다.

 

 

Operating System

운영체제란 하드웨어를 관리하는 시스템 프로그램으로, 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다. 

 

운영체제의 목적은 다음과 같다.

1. 사용자가 컴퓨터 시스템을 편리하게 사용할 수 있는 환경(interface) 를 제공

2. 사용자 프로그램을 효율적으로 실행시켜 사용자 문제를 좀 더 쉽게 해결 (프로세스 제어 관리)

3. 컴퓨터 하드웨어를 효율적인 방법으로 사용 (자원 관리)

4, 저전력

 

 

Computer System Operation

입출력 장치와 CPU 는 동시에 실행될 수 있으며, 서로 다른 일을 독립적으로 한다. 그러나 CPU는 매우 빠르고 그에 비해 입출력 연산은 현저히 느리다. 따라서 오래 걸리는 입출력 연산을 CPU 가 매번 기다린다면 효율이 매우 떨어질 것이므로, 입출력 연산 결과가 나올 때 까지 CPU는 다른 일을 한다. 여기서 CPU 에게 작업이 완료 되었음을 알려 주는 것이 인터럽트 이다. 즉, 장치 컨트롤러는 interrupt 를 줌으로써 CPU 에게 이벤트 발생을 알린다. 

 

인터럽트는 크게 h/w 인터럽트 s/w 인터럽트로 나뉘는데, h/w 인터럽트는 하드웨어가 발생시키는 인터럽트로, cpu가 아닌 다른 하드웨어 장치가 물리적으로 신호를 주는 경우이다. 이 경우는 시스템 버스를 통해 CPU에 신호를 보낸다. s/w 인터럽트는 cpu 내부적으로 발생한 것으로, 예외상황과 같은 경우에 소프트웨어가 스스로 발생시킨다. 이 경우는 시스템 콜 이라는 명령으로 인터럽트를 발생시킨다. 

 

 

Interrupt Handling

OS는 CPU의 레지스터와 program counter(pc) 값을 저장하고 유지함으로서 cpu와 I/O가 실행될 때를 관리한다. polling 은  주기적으로 이벤트를 감시해 상황이 발생하면 해당 처리 루틴을 실행하여 처리하는 것으로, 컴퓨터 자원이 낭비되는 방법이다. 대부분의 경우에는 interrupt 를 사용하여, 프로세서에게 일을 처리해 달라고 요청하는 수단을 사용하며 폴링과 대비된다. 

인터렙트 백터(Interrupt vector)란, 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴(Service routine)들의 주소를 가지고 있는 공간이다. 인터럽트 서비스 루틴(ISR)은 인터럽트 핸들러라고도 부르며 실제 인터럽트들을 처리하는 루틴이다. 인터럽트가 발생하면 CPU의 현재 레지스터와 PC값을 저장하고 ISR 로 분기하여 해당 인터럽트를 처리한다. 해당 작업을 다 처리하면, 레지스터와 PC값을 복원해 이전 실행 위치로 복귀할 수 있다. 

 

Storage Structure

Main memory 는 Ram(Random-access Memory) 으로 불리며, CPU가 직접 접근할 수 있는 저장 장치이다. CPU는 메모리에서만 명령어를 로드할 수 있기 때문에, 실행하려는 프로그램은 반드시 메모리에 저장되어 있어야 한다. 따랴서 커널이 프로그램을 메모리에 할당해 실행시키며,  모든 프로그램은 메인 메모리에 로드되어 실행된다.

 

그러나 RAM 은 전원이 꺼지면 저장된 데이터가 사라지는 휘발성 장치이고, 모든 프로그램을 담기엔 너무 작고 비싸기 때문에 비휘발성 기억장치인 보조저장장치(Secondary storage) 가 필요하다.

휘발성 기억장치인 메인 메모리, 캐시, 레지스터는 용량이 작고 비싸다. 반면에 하드 디스크, 광학 디스크, 자기테이프는 비휘발성 기억장치로 용량이 크고 저렴하다.

 

 

Computer System Architecture

현대 대부분의 컴퓨터은 멀티 프로세서 시스템이다. 멀티 프로세서 컴퓨터는 2개 이상의 프로세서를 가지고 있다. 모든 프로세서들은 하나의 메로리를 공유하고, 동일한 작업을 병렬적으로 수행할 수 있다. 이러한 멀티 프로세서의 장점은 다음과 같다. 

1. 처리량의 증가

2. 확장성

3. 신뢰성 증가

 

멀티 프로세서 시스템은 비대칭 멀티프로세싱과 대칭 멀티프로세싱으로 나뉘는데, 비대칭 멀티프로세싱은 하나의 프로세서가 다른 프로세서들을 제어하고 지시를 내리는 형태이다. 반면, 대칭 멀티프로세싱은 모든 프로세서들이 하나의 메모리를 공유하고 동일한 작업을 병렬적으로 수행한다.

 

 

현대 컴퓨터 시스템은 기본적으로 von Neumann 구조를 따른다. 여러 개의 장치 제어기와 CPU들로 구성되며 공통 버스로 연결이 되어 있다. 이는 다수의 process 들이 동작하기 위함이다. 장치 제어기는 특정 타입의 장치를 담당하며 로컬 버퍼 저장장치가 있어서, 자신이 제어하는 주변 장치와의 데이터 전송을 담당한다. 

 

모든 data access 에 CPU 가 관여한다면 효율이 매우 떨어질 것이다. 따라서 DMA 는 CPU의 개입 없이 장치 제어기가 데이터 블록 단위로 메모리와 자신의 buffer 간의 데이터 전송을 담당한다. 

 

 

Operating System Structure

단일 프로그램은 CPU 와 I/O 장치들을 항상 바쁜 상태로 유지할 수 없기 때문에, multiprogramming 능력이 꼭 필요하다. 멀티 프로그래밍에서는 여러 작업을 메모리에 적재한 후, 운영체제가 메모리의 작업 중 하나를 선택해서 실행하는데 이를 job scheduling 이라고 한다.

 

Timesharing (multitasking) 이란 multiprogramming 의 논리적 확장 개념이다. time sharing 은 os가 cpu의 시간을 slice 하여 각 프로세스에 분배하는 것이다. 즉, 프로세스마다 작업 시간을 정해두고 번갈아가면서 작업하는 방식으로, 프로세스들이 빠르게 번갈아가면서 메모리를 사용하면 사용자 입장에서는 마치 동시에 작동하는 것처럼 보이게 될 것이다. 이러한 시분할 시스템은 사용자와 시스템 간에 직접적인 통신을 제공하여 사용자가 응답을 기다리기 때문에 응답시간이 짧아야 하며 주로 1초 이내여야 한다. 

 

시분할 시스템과 멀티프로그래밍 시스템은 여러 작업들을 동시에 메모리에 올리는 방식이다. 따라서 여러 작업을 메모리로 가져올 준비가 된 경우 어떤 것을 메모리에 올릴지 정하는 과정이 작업 스케줄링(Job scheduling) 이고, 여러 작업이 동시에 실행 할 준비가 된 경우 어떤 것을 실행 시킬지 정하는 과정이 CPU 스케줄링이다. 만약, 프로세스가 메모리에 적합하지 않을 경우 swapping(in/out) 도 가능하다. 만약, 너무 많은 메모리를 사용하게 되는 경우, 응답 시간을 줄이기 위해 가상 메모리를 사용하기도 한다.  가상 메모리는 보조기억장치의 일부를 메인 메모리처럼 사용하는 기술로, 실제 물리 메모리(Physical memory)보다 더 큰 프로그램을 구동할 수 있도록 해준다.

 

 

Operating-System Operations

운영체제에서 실행하는 작업과 사용자가 실행하는 작업을 구분하기 위해 모드(Mode)를 나눠두었다. User mode 와 Kernel mode 로 구분되며, User mode 는 cpu가 user program을 수행하는 것이며, kernel mode 는 cpu가 kernel program(system software) 을 수행하는 것이다. 이러한 이중 모드(Dual-mode) 를 사용하면 운영체제와 다른 시스템들을 보호할 수 있다. 어떤 명령들은 커널 모드에서만 실행이 가능하도록 권한이 부여되었다. 따라서 유저 모드에서 이러한 명령을 실행하려 한다면 하드웨어는 이 동작을 막고, OS에게 트랩을 보낼 것이다. 유저 모드에서 커널 모드의 기능을 호출하고 싶다면, 시스템 콜이라는 인터페이스를 통해야만 가능하다.

 

운영체제는 CPU 에 대한 제어를 유지할 수 있도록 보장해야 한다. Timer(타이머)는 프로그램이 무한 루프에 빠지거나 프로세스가 자원을 독차지 하는 것을 방지 하기 위해, 지정된 시간 후 인터럽트 하도록 설정한다. 

 

위 그림은 사용자 프로그램이 제어권을 독차지 하는 것을 막기 위해, 타이머 인터럽트가 발생하는 사례이다. 특정 주기로 인터럽트가 발생하면 사용자 모드에서 커널 모드로 진입한다.

 

 

Process Management

프로그램이 storage 에서 memory 로 올라와서 instance(객제)가 되어 실행되는 순간 프로세스가 된다. 프로그램은 저장된 파일로 수동적 존재이며, 프로세스는 다음에 실행할 명령을 지정한다는 점에서 능동적 존재이다. 프로세스는 CPU, 메모리, I/O, 파일과 같은 여러가지 자원들을 필요로 한다. 또한 한 프로세스는 시스템 내의 작업 단위이며, 시스템은 프로세스들의 집합으로 구성된다.

 

 

Memory Management

프로그램이 실행되는데 필요한 모든 명령어, 데이터들은 메인 메모리에 있어야 한다.  따라서 CPU 이용률과 응답 속도를 개선하기 위해 메모리 관리는 매우 중요하다.

 

 

Storage Management

저장장치의 물리적인 속성들을 논리적 저장단위인 파일로 추상화한다. 따라서 저장장치 관리를 위해 파일 시스템 관리가 필수적이다. 

댓글