Operating System Services
OS는 사용자에게 프로그램이나 서비스가 실행할 수 있는 환경을 제공해줍니다. 이는 다음과 같은 기능들을 포함합니다:
- User Interface: 사용자가 OS에게 명령을 주는 인터페이스를 말합니다.
- Command-Line Interface (CLI)나 Graphical User Interface (GUI), Batch Interface등의 다양한 인터페이스 종류들이 존재합니다.
- Program execution: OS는 사용자의 프로그램을 메모리로 load하여 실행할 수 있도록 도와주며, 실행 뿐만 아니라 정상적/비정상적으로 동작하고 있는지도 검출합니다(indicating error).
- I/O operation: 대부분의 프로그램은 I/O동작을 필요로합니다. 이때 OS는 사용자 프로그램의 I/O 명령을 받아 I/O device에게 명령을 내려주는 매개체 역할을 수행합니다.
또한 OS는 사용자가 어떠한 기능을 수행하는 데 있어서 도움을 주는 다양한 기능들을 포함합니다:
- File-system manipulation: 파일 관리 시스템은 OS의 기능 중 하나입니다. 파일이나 디렉토리를 만들거나, 삭제, 수정하는 것들을 도와줍니다.
- Communication: OS는 같은 컴퓨터 안에서의 다른 프로그램들끼리나, 다른 컴퓨터에서의 프로그램들과의 정보 전달을 도와줍니다.
- shared memory나, msg queue와 같은 IPC를 통해 이뤄질 수 있습니다.
- Error detection: OS는 메모리나 I/O device에서의 사용자 프로그램의 오류를 지속적으로 감지하고 있어야합니다. 이를 통해 어떤 종류에 에러가 발생했을 시 적절한 조치를 OS가 수행할 수 있습니다. 또한 프로그래머가 그 시스템을 효율적으로 사용할 수 있도록 디버깅 기능 또한 갖고 있을 수 있습니다.
마지막으로 OS는 프로그램들 간의 자원 분배를 통해 효율적으로 프로그램들을 운영합니다:
- Resource allocation: 많은 수의 사용자나 job들이 동시에 동작하고 있는 경우 OS는 그들에게 자원을 분배해야합니다. 자원의 종류로는 CPU cycles, main memory, file storage등이 있습니다.
- Accounting: OS는 어떤 프로그램들이 어떤 자원을 사용하고 있는지를 지속적으로 추적하고 있어야합니다.
- Protection and security: OS는 다른 프로그램들에 의해 임의의 프로그램의 정보가 간섭되는 상황을 막아야합니다. (1) protection은 어떤 시스템의 자원들에 접근하는 것을 통제하고 있는 것을 말합니다. (2) security는 다른 사용자로부터의 사용자 권한을 말합니다. 이는 부적절한 외부의 접근 시도로부터 자원들을 보호하는 것을 말합니다.

위에서 설명한 것들을 그림으로 나타내면 다음과 같습니다. 명령을 위에서 아래로 흐르며, 사용자나 system 프로그램이 인터페이스를 통해 system call의 형태로 명령을 주면, OS의 각 서비스들은 이에 맞는 행동들을 hardware에 명령하는 구조입니다.
User Operating System Interface - CLI
CLI 혹은 command interface는 OS에게 직접적인 명령을 줄 수 있습니다. 이는 shell을 통해 구현됩니다.
shell은 사용자로부터 명령을 fetch하고 실행하는 역할을 수행합니다. 대부분 CLI는 내제되어 있기도 하지만, CLI 자체가 하나의 프로그램이기도 합니다. *shell은 OS에게 사용자의 요청을 의뢰하는 역할을 수행합니다.

User Operating System Interface - GUI
이는 CLI와 달리 보다 사용자 친화적인 인터페이스입니다. 이는 마우스와 키보드, 모니터를 통해 사용할 수 있으며 아이콘 (Icons)을 통해 파일이나 프로그램, 행동들을 표현합니다. 다양한 마우스 버튼을 통해 인터페이스 내의 요소들과 소통할 수도 있습니다.
*대부분의 system들을 CLI와 GUI 인터페이스 모두를 지원합니다.

Touchscreen Interfaces
터치 스크린을 통한 인터페이스는 최근에 발전한 인터페이스의 한 형태입니다. 이는 마우스가 필요없거나 사용 불가능하며 제스처를 통해 동작을 선택할 수 있습니다. 또한 가상 키보드를 통해 입력을 받는다는 특징을 갖습니다. 최근에는 Voice command를 통한 명령도 가능합니다.

System Calls
위 OS의 구조에서 봤듯, interface를 통해 받은 명령을 system call의 형태로 OS의 service에게 명령을 줍니다. 이는 일반적으로 C나 C++ 언어를 통해 구현됩니다. 대부분의 프로그램들은 system call을 직접 사용하지는 않고, 높은 수준의 Application Programming Interface (API)를 통해 명령을 전달합니다.
API의 대표적인 종류로는 Window OS의 Win32 API, UNIX, Linux, Mac OS X와 같은 POSIX기반 시스템의 경우를 위한 POSIX API, JVM을 위한 Java API가 있습니다.
System Call Implementation
일반적으로 system call은 번호와 관련되어 있습니다. System-call interface는 임의의 숫자와 그에 해당하는 system call들이 매핑되어있는 테이블로 구성되어있습니다. System-call interface는 OS kernel에 의도된 system call을 부르며, 반환 값이나 상태를 리턴합니다.
이때 caller, 즉 system call을 부른 사람은 내부의 system call이 어떻게 이 기능을 수행하는 지는 알 필요가 없습니다. 그저 API를 따라 명령을 주고 OS가 리턴해주는 값을 잘 해석하기만 하면됩니다.

System Call Parameter Passing
종종 system call을 통해 명령을 전달할 때, 추가적인 정보를 같이 보내야할 때가 있습니다. 이렇게 OS에 추가적인 파라미터를 넘겨주는 방법은 크게 3가지가 존재합니다:
- Simplest: pass the parameters in registers. 그냥 파라미터를 레지스터로 보내버리는 것입니다.
- 하지만 이 방법은 파라미터의 수가 많을 때, 파라미터의 크기가 클 때, 레지스터의 수가 부족한 경우가 발생할 수 있습니다.
- Parameters stored in a block, or table in memory: 파라미터를 메모리 안에 블럭이나 테이블에 저장하는 것입니다. 그 후 레지스터에는 블럭이나 테이블에서의 파라미터 주소값만 갖고 있습니다.
- 이는 Linux와 Solaris에서 이미 사용하고 있습니다. 이는 주소값만 레지스터에 저장하면 되기 때문에 차지하는 레지스터의 수를 줄입니다.
- Parameters placed, or pushed, onto the stack: 메모리 안에 스택에 파라미터를 저장한 후 파라미터들을 pop off하여 OS에서 사용합니다.
- 블럭이나 스택을 활용한 방법은 파라미터의 길이나 개수에 관계없이 OS에 파라미터를 보낼 수 있습니다. 메모리 공간만 충분하다면 주소만 알면 되기 때문에 개수 제한이 거의 없음.

user program이 돌아가고 있는 메모리 공간에서는 테이블을 통해 파라미터의 주소 X를 갖고 있습니다. OS에 파라미터를 보내줄 때는 register에 파라미터의 주소값인 X를 넘겨줍니다. 이를 통해 OS는 파라미터를 찾을 수 있습니다.
Types of System Calls
system call에는 정말 많은 종류의 기능들이 존재합니다. OS는 system call을 통해 명령을 받기 때문에 OS의 기능들과 일부 겹치는 것들이 존재합니다:
- Process control
- create process, terminate process
- end, abort
- load, execute
- get process attributes, set process attributes
- Debugger for determining bugs, single step execution
- Locks for managing access to shared data between processes (e.g., mutex), etc.
- File management
- create file, delete file
- open, close file
- read, write, reposition (e.g., lseek(...)), etc.
- Device management
- request device, release device
- read, write, reposition
- logically attach or detach devices (e.g., mount family), etc.
- Information maintenance
- get time or date, set time or date, etc.
- Communications (같은 컴퓨터내의 processes들끼리 or 다른 컴퓨터의 process와의 communication)
- create, delete communication connection
- send, receive messages if message passing model to host name or process name
- From client to server
- Shared-memory model create and gain access to memory regions, etc.
- Protection
- Control access to resources
- Get and set permissions, etc.


*위 그림은 stdlib의 printf("Greetings")가 어떻게 동작하는 지를 나타낸 것입니다. 이때 system call parameter는 "greetings"가 되는 것입니다.
Example: MS-DOS
kernel의 예시인 MS-DOS를 살펴보겠습니다. MS-DOS는 다음과 같은 특징을 갖습니다:
- Single-tasking: 그렇기 때문에 그림에서 알 수 있듯, 하나의 process만을 load해서 사용하고 있습니다.
- Shell invoked when system booted
- Simple method to run program
- No process created: Single-tasking과 비슷한 맥락으로, fork()가 안된다는 뜻입니다.
- Single memory space: Single-tasking이기에 메모리 공간이 여러개로 나눠질 필요가 없습니다.
- Loads program into memory, overwriting all but the kernel: kernel을 제외한 메모리 공간은 process로 덮어써집니다.
- Program exit -> shell reloaded: 실행중인 프로그램이 종료되면 shell을 동작시켜 다음 프로그램을 실행할 준비를 합니다.
Example: FreeBSD
다음 예시로는 FreeBSD입니다:
- Unix variant
- Multitasking: 여러개의 프로그램을 시분할을 통해 동시에 동작하는 것처럼 보이게 할 수 있습니다.
- User login -> invoke user's choice of shell
- Shell executes fork() system call to create process: fork()를 통해 프로세스를 생성할 수 있습니다.
- Executes exec() to load program into process: fork()를 통해 복사된 프로세스에서 exec()를 통해 새로운 프로세스를 로드합니다.
- Shell waits for process to terminate or continues with user commands: 만들어진 프로세스가 끝날때까지 기다리거나 다음 사용자 명령을 받습니다.
- Process exits with:
- code = 0 means no error
- code > 0 means error code


System Programs
system program은 system call을 이용하는 프로그램을 말합니다. 이는 간단한 system call로 이루어진 프로그램일 수도 있고, 여러 복잡한 system call들의 조합이 될 수도 있으며 프로그램을 개발하거나 실행하기에 편리한 환경을 제공해주는 역할을 맡습니다. 이때 system program은 다음과 같이 분류됩니다:
- File management
- 파일이나 디렉토리를 생성, 삭제, 복사 등등의 기능을 수행하는 프로그램들
- Status information
- 날짜나 시간, 사용가능한 메모리 등등의 정보들을 제공해주는 프로그램 (e.g., 작업관리자), 성능이나 로그, 디버깅 정보를 제공해주는 프로그램들
- 일반적으로 이런 프로그램들은 terminal이나 다른 output device들을 통해 결과를 보여줍니다.
- 몇몇 시스템은 여러 가지 설정들과 관련된 정보를 저장하고 있는 registry를 이용해 구현됩니다.
- File modification
- text editor를 통해 파일을 생성하거나 수정하는 프로그램들 (e.g., 메모장)
- Programming-language support
- compiler, assembler, debugger 등등의 프로그램들
- Program loading and execution
- absolute loader, relocatable loader, 높은 수준의 언어나 기계어를 위한 디버깅 시스템과 같은 프로그램들
- Communication
- 프로세스들이나 사용자들, 다른 컴퓨터간의 가상 통신 매커니즘을 제공하는 프로그램들
- Background services
- boot time에 실행되는 프로그램들 (booting되면서 실행되고 꺼지는 프로그램, 컴퓨터가 꺼지면 종료되는 프로그램)
- servieces나 subsystems, daemons라고도 불리는 이 프로그램은 disk checking, process scheduling등의 기능들을 수행합니다. 이는 user context에서 실행됩니다. *background program은 user context에서 실행되는 프로그램이긴 하지만, 안에 있는 system call들을 kernel context에서 실행되는 명령들입니다. 그래서 이를 딱 잘라 말하는 것은 무리가 있습니다.
- Application programs
- 이는 system의 일부로 보지 않습니다. 그리고 일반적으로 OS로 간주하지도 않습니다. *다른 system program들은 OS와 기능이 겹치는 것들도 많아서 구분하기 어렵습니다.
Operating System Design and Implementation
OS의 디자인과 구현은 정답이 없고, 그저 지금까지의 OS 디자인들과 구현을 통해 더 나은 것을 알 수 있을 뿐입니다. 그렇기에 OS의 내부 구조는 매우 다양합니다.
일반적으로 OS는 사용자 (User goals)와 시스템 (System goals) 모두를 신경쓰며 구현, 디자인해야 합니다:
- User goals: OS는 사용하기 편해야하며 배우기 쉽고, 믿을 수 있으며 안전하고 빨라야합니다.
- System goals: OS는 디자인하기 쉽고, 구현하기 쉬워야하며 유지 보수하기 편하고, 믿을 수 있으며 에러가 나지 않아야합니다.
이때 Policy와 Mechanism을 구분하는 것이 중요합니다:
- Policy: What will be done? 어떤 기능을 수행/제공해야하는가
- Mechanism: How to do it? 어떤 방식으로 이를 구현해야하는가
예를 들어 timer의 경우,
- CPU scheduling을 위해 timer를 사용한다면 이는 mechanism으로서의 timer (CPU scheduling을 구현하기 위한 방법으로서의 timer)
- 반면, 시간을 재기 위한 timer는 Policy로서의 timer (time을 제공하기 위한 것)
'[학교 수업] > [학교 수업] Operating System' 카테고리의 다른 글
[Operating System] Chapter 3: Processes (1) | 2025.04.05 |
---|---|
[Operating System] Chapter 2 & 3: Processes | Week 4 (0) | 2025.03.29 |
[Operating Systems] Chapter 1: Introduction | Week 2 (1) | 2025.03.17 |
[Operating System] Chapter 1: Introduction | Week 1 (0) | 2025.03.10 |
Operating System Services
OS는 사용자에게 프로그램이나 서비스가 실행할 수 있는 환경을 제공해줍니다. 이는 다음과 같은 기능들을 포함합니다:
- User Interface: 사용자가 OS에게 명령을 주는 인터페이스를 말합니다.
- Command-Line Interface (CLI)나 Graphical User Interface (GUI), Batch Interface등의 다양한 인터페이스 종류들이 존재합니다.
- Program execution: OS는 사용자의 프로그램을 메모리로 load하여 실행할 수 있도록 도와주며, 실행 뿐만 아니라 정상적/비정상적으로 동작하고 있는지도 검출합니다(indicating error).
- I/O operation: 대부분의 프로그램은 I/O동작을 필요로합니다. 이때 OS는 사용자 프로그램의 I/O 명령을 받아 I/O device에게 명령을 내려주는 매개체 역할을 수행합니다.
또한 OS는 사용자가 어떠한 기능을 수행하는 데 있어서 도움을 주는 다양한 기능들을 포함합니다:
- File-system manipulation: 파일 관리 시스템은 OS의 기능 중 하나입니다. 파일이나 디렉토리를 만들거나, 삭제, 수정하는 것들을 도와줍니다.
- Communication: OS는 같은 컴퓨터 안에서의 다른 프로그램들끼리나, 다른 컴퓨터에서의 프로그램들과의 정보 전달을 도와줍니다.
- shared memory나, msg queue와 같은 IPC를 통해 이뤄질 수 있습니다.
- Error detection: OS는 메모리나 I/O device에서의 사용자 프로그램의 오류를 지속적으로 감지하고 있어야합니다. 이를 통해 어떤 종류에 에러가 발생했을 시 적절한 조치를 OS가 수행할 수 있습니다. 또한 프로그래머가 그 시스템을 효율적으로 사용할 수 있도록 디버깅 기능 또한 갖고 있을 수 있습니다.
마지막으로 OS는 프로그램들 간의 자원 분배를 통해 효율적으로 프로그램들을 운영합니다:
- Resource allocation: 많은 수의 사용자나 job들이 동시에 동작하고 있는 경우 OS는 그들에게 자원을 분배해야합니다. 자원의 종류로는 CPU cycles, main memory, file storage등이 있습니다.
- Accounting: OS는 어떤 프로그램들이 어떤 자원을 사용하고 있는지를 지속적으로 추적하고 있어야합니다.
- Protection and security: OS는 다른 프로그램들에 의해 임의의 프로그램의 정보가 간섭되는 상황을 막아야합니다. (1) protection은 어떤 시스템의 자원들에 접근하는 것을 통제하고 있는 것을 말합니다. (2) security는 다른 사용자로부터의 사용자 권한을 말합니다. 이는 부적절한 외부의 접근 시도로부터 자원들을 보호하는 것을 말합니다.

위에서 설명한 것들을 그림으로 나타내면 다음과 같습니다. 명령을 위에서 아래로 흐르며, 사용자나 system 프로그램이 인터페이스를 통해 system call의 형태로 명령을 주면, OS의 각 서비스들은 이에 맞는 행동들을 hardware에 명령하는 구조입니다.
User Operating System Interface - CLI
CLI 혹은 command interface는 OS에게 직접적인 명령을 줄 수 있습니다. 이는 shell을 통해 구현됩니다.
shell은 사용자로부터 명령을 fetch하고 실행하는 역할을 수행합니다. 대부분 CLI는 내제되어 있기도 하지만, CLI 자체가 하나의 프로그램이기도 합니다. *shell은 OS에게 사용자의 요청을 의뢰하는 역할을 수행합니다.

User Operating System Interface - GUI
이는 CLI와 달리 보다 사용자 친화적인 인터페이스입니다. 이는 마우스와 키보드, 모니터를 통해 사용할 수 있으며 아이콘 (Icons)을 통해 파일이나 프로그램, 행동들을 표현합니다. 다양한 마우스 버튼을 통해 인터페이스 내의 요소들과 소통할 수도 있습니다.
*대부분의 system들을 CLI와 GUI 인터페이스 모두를 지원합니다.

Touchscreen Interfaces
터치 스크린을 통한 인터페이스는 최근에 발전한 인터페이스의 한 형태입니다. 이는 마우스가 필요없거나 사용 불가능하며 제스처를 통해 동작을 선택할 수 있습니다. 또한 가상 키보드를 통해 입력을 받는다는 특징을 갖습니다. 최근에는 Voice command를 통한 명령도 가능합니다.

System Calls
위 OS의 구조에서 봤듯, interface를 통해 받은 명령을 system call의 형태로 OS의 service에게 명령을 줍니다. 이는 일반적으로 C나 C++ 언어를 통해 구현됩니다. 대부분의 프로그램들은 system call을 직접 사용하지는 않고, 높은 수준의 Application Programming Interface (API)를 통해 명령을 전달합니다.
API의 대표적인 종류로는 Window OS의 Win32 API, UNIX, Linux, Mac OS X와 같은 POSIX기반 시스템의 경우를 위한 POSIX API, JVM을 위한 Java API가 있습니다.
System Call Implementation
일반적으로 system call은 번호와 관련되어 있습니다. System-call interface는 임의의 숫자와 그에 해당하는 system call들이 매핑되어있는 테이블로 구성되어있습니다. System-call interface는 OS kernel에 의도된 system call을 부르며, 반환 값이나 상태를 리턴합니다.
이때 caller, 즉 system call을 부른 사람은 내부의 system call이 어떻게 이 기능을 수행하는 지는 알 필요가 없습니다. 그저 API를 따라 명령을 주고 OS가 리턴해주는 값을 잘 해석하기만 하면됩니다.

System Call Parameter Passing
종종 system call을 통해 명령을 전달할 때, 추가적인 정보를 같이 보내야할 때가 있습니다. 이렇게 OS에 추가적인 파라미터를 넘겨주는 방법은 크게 3가지가 존재합니다:
- Simplest: pass the parameters in registers. 그냥 파라미터를 레지스터로 보내버리는 것입니다.
- 하지만 이 방법은 파라미터의 수가 많을 때, 파라미터의 크기가 클 때, 레지스터의 수가 부족한 경우가 발생할 수 있습니다.
- Parameters stored in a block, or table in memory: 파라미터를 메모리 안에 블럭이나 테이블에 저장하는 것입니다. 그 후 레지스터에는 블럭이나 테이블에서의 파라미터 주소값만 갖고 있습니다.
- 이는 Linux와 Solaris에서 이미 사용하고 있습니다. 이는 주소값만 레지스터에 저장하면 되기 때문에 차지하는 레지스터의 수를 줄입니다.
- Parameters placed, or pushed, onto the stack: 메모리 안에 스택에 파라미터를 저장한 후 파라미터들을 pop off하여 OS에서 사용합니다.
- 블럭이나 스택을 활용한 방법은 파라미터의 길이나 개수에 관계없이 OS에 파라미터를 보낼 수 있습니다. 메모리 공간만 충분하다면 주소만 알면 되기 때문에 개수 제한이 거의 없음.

user program이 돌아가고 있는 메모리 공간에서는 테이블을 통해 파라미터의 주소 X를 갖고 있습니다. OS에 파라미터를 보내줄 때는 register에 파라미터의 주소값인 X를 넘겨줍니다. 이를 통해 OS는 파라미터를 찾을 수 있습니다.
Types of System Calls
system call에는 정말 많은 종류의 기능들이 존재합니다. OS는 system call을 통해 명령을 받기 때문에 OS의 기능들과 일부 겹치는 것들이 존재합니다:
- Process control
- create process, terminate process
- end, abort
- load, execute
- get process attributes, set process attributes
- Debugger for determining bugs, single step execution
- Locks for managing access to shared data between processes (e.g., mutex), etc.
- File management
- create file, delete file
- open, close file
- read, write, reposition (e.g., lseek(...)), etc.
- Device management
- request device, release device
- read, write, reposition
- logically attach or detach devices (e.g., mount family), etc.
- Information maintenance
- get time or date, set time or date, etc.
- Communications (같은 컴퓨터내의 processes들끼리 or 다른 컴퓨터의 process와의 communication)
- create, delete communication connection
- send, receive messages if message passing model to host name or process name
- From client to server
- Shared-memory model create and gain access to memory regions, etc.
- Protection
- Control access to resources
- Get and set permissions, etc.


*위 그림은 stdlib의 printf("Greetings")가 어떻게 동작하는 지를 나타낸 것입니다. 이때 system call parameter는 "greetings"가 되는 것입니다.
Example: MS-DOS
kernel의 예시인 MS-DOS를 살펴보겠습니다. MS-DOS는 다음과 같은 특징을 갖습니다:
- Single-tasking: 그렇기 때문에 그림에서 알 수 있듯, 하나의 process만을 load해서 사용하고 있습니다.
- Shell invoked when system booted
- Simple method to run program
- No process created: Single-tasking과 비슷한 맥락으로, fork()가 안된다는 뜻입니다.
- Single memory space: Single-tasking이기에 메모리 공간이 여러개로 나눠질 필요가 없습니다.
- Loads program into memory, overwriting all but the kernel: kernel을 제외한 메모리 공간은 process로 덮어써집니다.
- Program exit -> shell reloaded: 실행중인 프로그램이 종료되면 shell을 동작시켜 다음 프로그램을 실행할 준비를 합니다.
Example: FreeBSD
다음 예시로는 FreeBSD입니다:
- Unix variant
- Multitasking: 여러개의 프로그램을 시분할을 통해 동시에 동작하는 것처럼 보이게 할 수 있습니다.
- User login -> invoke user's choice of shell
- Shell executes fork() system call to create process: fork()를 통해 프로세스를 생성할 수 있습니다.
- Executes exec() to load program into process: fork()를 통해 복사된 프로세스에서 exec()를 통해 새로운 프로세스를 로드합니다.
- Shell waits for process to terminate or continues with user commands: 만들어진 프로세스가 끝날때까지 기다리거나 다음 사용자 명령을 받습니다.
- Process exits with:
- code = 0 means no error
- code > 0 means error code


System Programs
system program은 system call을 이용하는 프로그램을 말합니다. 이는 간단한 system call로 이루어진 프로그램일 수도 있고, 여러 복잡한 system call들의 조합이 될 수도 있으며 프로그램을 개발하거나 실행하기에 편리한 환경을 제공해주는 역할을 맡습니다. 이때 system program은 다음과 같이 분류됩니다:
- File management
- 파일이나 디렉토리를 생성, 삭제, 복사 등등의 기능을 수행하는 프로그램들
- Status information
- 날짜나 시간, 사용가능한 메모리 등등의 정보들을 제공해주는 프로그램 (e.g., 작업관리자), 성능이나 로그, 디버깅 정보를 제공해주는 프로그램들
- 일반적으로 이런 프로그램들은 terminal이나 다른 output device들을 통해 결과를 보여줍니다.
- 몇몇 시스템은 여러 가지 설정들과 관련된 정보를 저장하고 있는 registry를 이용해 구현됩니다.
- File modification
- text editor를 통해 파일을 생성하거나 수정하는 프로그램들 (e.g., 메모장)
- Programming-language support
- compiler, assembler, debugger 등등의 프로그램들
- Program loading and execution
- absolute loader, relocatable loader, 높은 수준의 언어나 기계어를 위한 디버깅 시스템과 같은 프로그램들
- Communication
- 프로세스들이나 사용자들, 다른 컴퓨터간의 가상 통신 매커니즘을 제공하는 프로그램들
- Background services
- boot time에 실행되는 프로그램들 (booting되면서 실행되고 꺼지는 프로그램, 컴퓨터가 꺼지면 종료되는 프로그램)
- servieces나 subsystems, daemons라고도 불리는 이 프로그램은 disk checking, process scheduling등의 기능들을 수행합니다. 이는 user context에서 실행됩니다. *background program은 user context에서 실행되는 프로그램이긴 하지만, 안에 있는 system call들을 kernel context에서 실행되는 명령들입니다. 그래서 이를 딱 잘라 말하는 것은 무리가 있습니다.
- Application programs
- 이는 system의 일부로 보지 않습니다. 그리고 일반적으로 OS로 간주하지도 않습니다. *다른 system program들은 OS와 기능이 겹치는 것들도 많아서 구분하기 어렵습니다.
Operating System Design and Implementation
OS의 디자인과 구현은 정답이 없고, 그저 지금까지의 OS 디자인들과 구현을 통해 더 나은 것을 알 수 있을 뿐입니다. 그렇기에 OS의 내부 구조는 매우 다양합니다.
일반적으로 OS는 사용자 (User goals)와 시스템 (System goals) 모두를 신경쓰며 구현, 디자인해야 합니다:
- User goals: OS는 사용하기 편해야하며 배우기 쉽고, 믿을 수 있으며 안전하고 빨라야합니다.
- System goals: OS는 디자인하기 쉽고, 구현하기 쉬워야하며 유지 보수하기 편하고, 믿을 수 있으며 에러가 나지 않아야합니다.
이때 Policy와 Mechanism을 구분하는 것이 중요합니다:
- Policy: What will be done? 어떤 기능을 수행/제공해야하는가
- Mechanism: How to do it? 어떤 방식으로 이를 구현해야하는가
예를 들어 timer의 경우,
- CPU scheduling을 위해 timer를 사용한다면 이는 mechanism으로서의 timer (CPU scheduling을 구현하기 위한 방법으로서의 timer)
- 반면, 시간을 재기 위한 timer는 Policy로서의 timer (time을 제공하기 위한 것)
'[학교 수업] > [학교 수업] Operating System' 카테고리의 다른 글
[Operating System] Chapter 3: Processes (1) | 2025.04.05 |
---|---|
[Operating System] Chapter 2 & 3: Processes | Week 4 (0) | 2025.03.29 |
[Operating Systems] Chapter 1: Introduction | Week 2 (1) | 2025.03.17 |
[Operating System] Chapter 1: Introduction | Week 1 (0) | 2025.03.10 |