Operating System Services

운영체제는 User(사용자)와 System에게 다양한 서비스를 제공한다. 

 

User를 위한 서비스

UI (User Interface)

UI란 사용자와 컴퓨터 시스템 간의 상호 작용할 수 있도록 운영체제에 의해 제공되는 기능이다.

UI에는 대표적으로 CIL, GUI이 있다. 

 

CLI(Command Line Interface)란,

사용자가 텍스트로 명령어를 입력하고, 결과를 화면에 출력해주는 UI를 의미한다.

따라서, 이를 keyboard-based interface라고도 부른다.

CLI를 제공하는 인터페이스들을 "shell" 또는 "Command Interpreter"라고 부른다.

대표적인 예로, MS-DOS와 Unix 등이 있다.

 

GUI(Graphical User Interface)란, 

Window나 Mac-OS등 현재 가장 많이 사용되는 interface로 

아이콘을 통해 입출력의 기능을 제공하여, 사용자에게 편리한 interface 제공한다.

이는, Mouse-based Interface라고도 부른다.

 

CLI는 사용자가 모든 명령어를 외워야 한다는 단점이 있지만, 

GUI와 달리 그래픽에 resource를 사용하지 않으므로 빠르다는 장점이 있다. 

 

이처럼 CLI GUI는 각각의 장단점이 존재하며, 

현재 많은 OS들은 CLI와 GUI를 모두 제공한다.

 

Program Execution

시스템은 프로그램을 메모리에 로드하고, 이를 실행할 수 있어야 한다. 

프로그램이 실행되면, 정상적이든 비정상적이든 어떻게든 실행을 끝낼 수 있어야 한다. 

 

I/O Operations

프로그램이 입출력이 필요할 때,

보통 보안 등의 이유로 사용자가 I/O Device를 조작할 수 없기 때문에, 

OS가 입출력 명령을 수행해야 한다. 

 

File System manipulation (파일 시스템 조작)

프로그램은 파일을 읽고 쓸 수 있기에, 

운영체제는 파일의 생성, 삭제 검색등의 기능을 제공한다.

 

Communication

프로세스 간의 정보를 교환이 필요할 때, 운영체제는 교환할 수 있는 기능을 제공한다. 

대표적인 기능으로는 Shared Memory, Message Passing 방식이 있다.

 

Error Detection

운영체제는 Hadware, I/O Device, User program에서 일어나는 에러를 빨리 탐지할 수 있어야 한다. 

 

System을 위한 서비스 

OS는 사용자에게 직접적인 도움은 되지 않지만, 시스템을 위한 서비스도 제공한다.

Resource Allocation

multi-user나 multi-tasking의 경우 

운영체제는 resource를 적절히 분배하며 관리한다.

 

Accounting

운영체제는 어떤 사용자가 어떤 resource를 사용하고 있는지 추적할 수 있어야 한다.

 

Protection & Security

사용자가 resource에 접근을 시도할 때, 사용자 인증을 진행한다. 

인증되지 않는 경우 system resource에 접근하는 것을 방지한다.

 

 

System Calls

운영체제는 kernel mode와 user mode로 나뉘어 관리하게 된다. 

 

프로그램이 실행되면 user mode에서 실행되는데,

파일 읽기,쓰기 혹은 I/O와 같은 작업은 system resource에 대한 접근이 필요하다. 

 

하지만, system resource는 kernel mode에서만 접근이 가능기에, 

"System Call"은 user mode에서 kernel mode의 기능을 사용할 수 있게 해준다.

System Call의 호출은 API(Application Program Interface)를 통해 이루어지기 때문에, 

사용자는 System Call의 자세한 구현을 몰라도 되며, 이식성이 뛰어나다는 장점이 있다.

 

예를 들어 C언어에서 printf이란 함수를 사용하게 되면, 

API의 형태인 write()이라는 system call을 호출하게 된다.

system call이 호출되어 Kernel mode에서의 수행을 완료하고, 

User mode로 돌아온다.

 

Parameter Passing 

특정 system call은 매게변수가 필요로 할 때가 있는데, 

OS에 매개변수를 넘기는 3가지 방법이 있다. 

 

  • 매개변수를 CPU내에 register로 전달한다.
  • 매게변수를 메모리의 table에 저장하고, table의 주소를 register로 전달한다.
  • 프로그램에서 stack에 매게변수를 추가(push)하면, OS에서 값을 뺀다(pop).

 

Type of System Call

  • Process Control : create/terminate, load/execute ...
  • File Management : create/delete, open/close, read/write
  • Memory Management : 메모리 할당
  • Information Maintenance : get/set timer or date ...
  • Communications : create/delete connection ...

 

Operating System Design & Implementation

OS를 디자인하고 구현하기 위해서는 많은 것을 고려해야 한다. 

 

Design

사용자의 입장과 시스템의 입장에서의 요구사항을 고려해야 한다. 

사용자의 입장에선, 사용하기 편해야 하며, fast, reliable 해야 한다.

 

시스템 입장에선, 설계, 구현, 유지보수가 쉬워야 하며, 

flexible, reliable, 효율적이어야 한다. 

 

Policy & Mechanism

well-designed OS를 구현하기 위해선,

policy와 mechanism을 모두 제공해야 한다. 

 

Mechanism은 "how to do something(어떻게 할것인가?)"에 대한 이슈라면, 

Policy는 "What to do(무엇을 할것인가?)"에 대한 이슈이다. 

 

예를 들어, 타이머를 통한 interrupt 발생 구조는 mechanism이지만, 

특정 사용자에게 타이머를 얼마나 설정할지는 Policy이다.

 

Implementation

초기의 운영체제는 Assmbly 언어로 작성되었지만, 

현대의 운영체제는 C와 C++과 같은 HHL(High Level Language)로 작성이 된다.

 

HHL로 운영체제를 구현하게 되면,

작성하기 쉽고 이식성(portability)가 뛰어나지만

Assmbly에 비해 느리고 저장 장치가 많이 소요된다는 단점이 있다. 

 

하지만, 이는 좋은 자료 구조와 알고리즘을 통해 극복할 수 있기에, HHL로 작성이 된다.

 

 

 

Operating System Structures

Simple Structures

현대의 운영체제는 계층적으로 구분되어 있지만, 

과거의 운영체제는 계층적으로 구분되어 있지 않았다. 

대표적인 예로 MS-DOS, 최초의 UNIX가 있다.

사용자가 직접 I/O 루틴에 접근하여, 디스플레이 혹은 디스크 등에 쓰기 읽기 작업이 가능했다. 

따라서, 프로그램의 문제가 생길 경우 전체 시스템의 문제가 생겼다. 

 

Layered Structures

Layered Structure는 운영체제의 계층을 분리하여 관리한다. 

가장 안쪽의 계층 (layer 0)은 HW이고, 

가장 위쪽의 계층 (layer N-1)은 UI이다. 

 

Layered Structure에서 각 Layer는 하위 Layer의 서비스만 이용하기 때문에, 디버깅이 쉽다. 

만약 K번째 layer까지 디버깅을 완료하였다면, 에러는 해당 Layer에서만 난다는 것을 보장하기 때문이다.

 

하지만, layer를 정의하기 어렵다는 것과

각 Layer에게 data를 변경하고 전달할 경우, Overhead가 추가되어 효율적이지 않다는 단점이 있다.

 

Micro-kernel Structures

Micro Kernel은 운영체제에 추가되어야 하는 메카니즘을 최소한으로 제공하는 커널(운영체제)이다.

Kernel Mode에서 수행되어야 하는 주소공간 관리, 스레드 관리등 핵심적인 OS 기능들은 core에 남기고 나머지는 "User space"로 넘긴다.

즉, Kernel Mode와 User Mode로 분리한다.

위와 같이 최소한으로 kernel을 유지하기 때문에, Reliable, Secure 측면에서 좋다.

또한, 새로운 서비스는 Kernel의 변경 없이, User mode에 묘듈 형식으로 추가되기 때문에 확장성이 용이하며, 

Kernel의 크기가 작기 때문에 변경할 대상도 작은 경우가 많아 Portability도 좋다. 

 

반면 단점도 존재한다. 

User module과 Kernel 사이의 Communication이 필요할 경우 "message passing" 방식으로 이루어지는데,

이로 인해 overhead가 발생할 수 있다.

 

Module Structures

Module Structure은 현대 대부분의 운영체제가 kernel에 적용하는 방식이다. 

모듈이란 Kernel을 확장하기 위한 기술로, 객체 지향의 모듈화 개념을 사용한다.

 

Core kernel에는 핵심적인 기능만 있고, module은 특정 기능을 수행한다.

runtime이나 부팅 중에 추가적인 기능이 필요한 경우

kernel에 모듈을 load 하여 사용한다. 

따라서, 더 flexible 하고 유지보수가 용이하다. 

 

micro-kernel과 유사하지만, message passing이 아닌 모듈을 load 하는 방식이기 때문에  

message passing으로 인한 오버헤드가 발생하지 않는다.

 

Computer System Booting Procedure

우선 컴퓨터의 전원을 켜게 되면, 

  • CPU가 "ROM"에 저장된 BIOS를 실행시킨다.
  • BIOS는 POST라는 주변 하드웨어 체크를 진행한다.
  • 하드웨어의 이상이 없으면 CPU는 Bootloader를 실행한다. 
  • Bootloader는 시스템을 초기화한다.
  • 초기화 이후, Disk의 kernel을 찾아 메모리에 load하고 시작한다.

Bootloader는 작은 시스템의 경우 OS와 같이 ROM에 저장되어 있다. 

 

반면, PC와 같은 큰 시스템의 경우, 

Bootloader는 ROM에 OS는 disk에 저장되며, 

MBR섹터에 저장된 "간단한 Bootloader"가 "복잡한 Bootloader"를 load하는 방식으로 진행된다.

MBR(Master Boot Record)이란, 기억 장치의 첫 번째 섹터(512Byte)의 영역이다. 
주로 Bootloader가 저장되어 있기 때문에, boot block이라고도 부른다.

 

 

Reference

Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 9th

'CS > Operating System' 카테고리의 다른 글

[OS] Synchronization  (0) 2023.04.06
[OS] CPU Scheduling  (0) 2023.04.05
[OS] Threads  (0) 2023.04.02
[OS] Processes  (1) 2023.03.29
[OS] Operating System  (0) 2023.03.12
복사했습니다!