[목차]
1. System Call
2. Operating-System Services
3. Operating-System Structure
참고)
- https://parksb.github.io/article/6.html
- KOCW 공개강의 (2014-1. 이화여자대학교 - 반효경)
- Sogang Univ. Operating System Lecture Note (2018-2. Prof. Youngjae Kim)
1. System Call
시스템 콜(System Call)은 커널과 사용자 프로그램을 이어주는 인터페이스 역할을 한다. 사용자 프로그램이 디스크에 있는 파일을 여는 것은 파일 시스템에 접근한다는 의미다. 시스템에 접근하기 위해서는 커널 모드로 전환되어야 하는데, 이때 시스템 콜을 사용한다.
시스템 콜은 주로 C/C++과 같은 High-level 언어로 작성된다.
실제로는 프로그램 이식성(Portability)과 사용의 편리함 때문에 직접적인 시스템 콜보단 API(Application Program Interface)를 통해서 사용된다.
주로 사용하는 API는 Window에선 Win32, UNIX/Linux/Mac OS X 등에서는 POSIX-API, JVM(Java Virtual Machine)에서는 Java API가 있다.
각각의 시스템 콜은 숫자로 구별된다. 시스템 콜 인터페이스(System Call Interface)가 이 숫자에 따라 매핑된 테이블을 유지한다. 시스템 콜 테이블(System Call Table)은 메모리 주소의 모음인데, 해당 메모리 주소는 인터럽트 서비스 루틴을 가리키고 있다.
시스템 콜 인터페이스는 OS 커널에서 의도된 시스템 콜을 발생시키고, 시스템 콜의 상태나 기타 값들을 반환한다.
호출자(Caller)는 시스템 콜이 어떻게 구현되는지 알 필요는 없고, 어떻게 API를 사용하는지, 시스템 콜의 결과로 OS가 어떤 작업을 하는지만 알면 된다.
시스템 콜을 호출할 때는 OS나 콜의 종류에 따라 요구되는 정보의 양이 다양하다.
OS에 변수(Parameter)를 넘겨주는 방법으로 흔히 사용되는 세 방법이 있다.
1. Call by value : 가장 단순한 방법, 레지스터에 바로 변수를 넘겨주는 방식이다.
2. Call by reference : 만약 변수가 레지스터보다 더 많은 경우는, 블록(block)이나 테이블(Table)에 저장한 후 저장된 주소를 레지스터에 변수로 넘겨주는 방식이다.
3. 스택에 변수를 저장.
2, 3의 방식은 변수의 개수에 제한이 없다.
<시스템 콜의 종류>
1. 프로세스 제어(Process Control) - end/abort, load/execute, create/terminate process, get/set process attributes, wait for time, wait/signal event, allocate/free memory
2. 파일 관리(File management) - create/delete file, open/close, read/write/reposition, get/set file attributes
3. 장치 관리(Device management) - request/release device, read/write/reposition, get/set device attributes, attach/detach devices
4. 정보 유지(Information maintenance) - get/set time/date/process/file/device attributes
5. 의사소통(Communications) - create/delete communication connection, send/receive messages, transfer status info, attach/detach remote devices
6. 보호(Protection)
2. Operating-System Services
운영체제는 사용자들에게 도움을 주는 여러 기능들을 제공한다.
1. User Interface(UI)
- UI는 사용자와 컴퓨터 시스템이 만나는 지점을 말한다. 거의 모든 운영체제가 UI를 가지고 있다.
인터페이스는 크게 CLI(Command-Line Interface)와 GUI(Graphic User Interface), Batch로 나뉜다.
CLI는 사용자가 텍스트 명령을 통해 명령을 내리는 인터페이스이다. 이러한 인터페이스를 제공하는 프로그램을 셸(Shell)이라고 부른다.
GUI는 현재 가장 흔하게 찾아볼 수 있는 인터페이스이며, 키보드 타이핑, 마우스 클릭 등 다양한 방법으로 화면에 띄워진 그래픽을 조작해 컴퓨터에게 명령을 내린다.
Batch는 명령을 파일에 넣어두고 파일이 실행되면서 명령을 실행하는 인터페이스이다.
2. Program Execution
- 시스템은 반드시 프로그램을 메모리에 로드하고, 이를 실행할 수 있어야 한다. 그리고 정상적으로든 비정상적으로든 실행을 종료시킬 수 있어야 한다,
3. I/O Operations
- 실행 중인 프로그램이 파일이나 I/O 장치를 사용하는 입출력을 필요로 한다면 운영체제는 입출력 명령을 수행해야 한다. 이때 효율과 보안을 위해 사용자가 직접 입출력 장치를 조작하지 않고 운영체제를 거치도록 한다.
4. File-system manipulation
- 파일을 읽고 쓰고, 생성하고 삭제한다. 또 사용자가 접근하지 못하도록 막기도 한다.
5. Communications
- 프로세스들이 서로 정보를 교환할 때, 운영체제는 공유 메모리(Shared Memory)나 메시지 패싱(Message Passing, packets moved by the OS)이라는 방법을 사용한다.
6. Error Detection
- 운영체제는 발생할 수 있는 에러를 바로 탐지할 수 있어야 한다. CPU나 메모리, I/O 장치, 사용자 프로그램 등에서 에러가 발생할 수 있다. 각 에러 종류마다 올바르고 일관적인 컴퓨팅을 위해 운영체제는 적절한 액션을 취해야 한다.
운영체제의 또 다른 기능으로, 자원 공유를 통해 시스템의 효율적인 작업을 보장한다.
1. Resource allocation
- 다수의 사용자나 작업이 동시에 수행될 때, 운영체제가 자원을 잘 분배해준다.
2. Accounting
- 사용자가 얼마나 많이, 어떤 종류의 컴퓨터 자원을 사용하고 있는지를 지속적으로 추적해야 한다.
3. Protection and Security
- 다중 사용 혹은 네트워크 컴퓨터 시스템에 저장되어 있는 정보의 소유자는 정보를 사용하거나 프로세스를 수행할 때 다른 사용자의 방해를 받지 않아야 한다. 보호(Protection)는 시스템 자원에 대한 모든 접근이 통제되어야 함을 보장하는 것을 포함한다.
3. Operation System Structure
현대 운영체제는 계층을 나눠서 시스템을 관리한다.
1. MS-DOS
MS-DOS에서는 몇몇 구조를 가지고 있긴 했지만, 사실상 인터페이스나 계층이 잘 구분되지는 않았다. MS-DOS는 사용자 프로그램이 입출력 루틴에 접근해 디스플레이와 디스크 드라이브에 직접 쓰기를 할 수 있었다. 따라서 사용자 프로그램에 문제가 생기면 시스템 전체에 문제가 발생하였다. 이를 개선한 시스템이 UNIX 시스템이다.
2. UNIX
전통적인 UNIX 시스템 구조는 제한적인 구조를 가졌다. MS-DOS에 비해 기능이 분리되었지만, 여전히 하나의 계층이 너무 많은 일을 수행했다. 하드웨어 계층 위, 사용자 계층 아래에 있는 커널이 모든 기능(파일 시스템, 메모리 관리, CPU 스케줄링 등)을 제공했고, 이러한 구조는 구현과 유지보수가 쉽지 않았다.
따라서, 커널의 기능들을 최대한 '사용자' 공간으로 이동시키고, 커널에서 핵심적인 요소만 남긴 가벼운 커널인 마이크로커널(Microkernel)을 남겨두었다. 커널이 커질수록 문제가 생길 가능성이 높아지고 유지보수가 힘들어지기 때문이다. 마이크로커널은 코드 양이 훨씬 적어 컴파일/테스트 시간이 비교적 짧고, 확장하기도 쉽고, 새로운 구조에 이식(Porting)하기도 쉽다.
커뮤니케이션은 메시지 패싱(Message passing)을 이용하여 사용자 모듈 사이에서 일어난다.
이렇게 운영체제를 세분화해 계층을 분리한 것을 계층적 접근(Layered approach) 방식이라고 한다. 이 방식은 유지보수가 아주 편하고, 하나의 계층에만 신경 쓰면 다른 계층에는 아무런 신경을 쓰지 않아도 된다.
3. Modules
대부분의 현대 운영체제는 커널 모듈을 구현한다. 모듈은 커널을 확장하기 위한 기술로, 전반적으로 계층 구조와 비슷하지만 더 유연하고 효율적이다. 프로세스에 실시간으로 모듈을 붙여 작동시킬 수 있고, 각 기능들을 독립적으로 관리할 수 있어 효과적으로 시스템을 유지할 수 있다.
객체 지향의 방식을 사용하고, 각각의 핵심 요소들은 모두 분리되어 있어 커널에서 필요할 때마다 각각 로드될 수 있다.
PC로 보시는 것을 권장합니다.
피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^
'Computer Science > 운영체제(OS)' 카테고리의 다른 글
[운영체제(OS)] 6. 프로세스 동기화(Process Synchronization) (2) | 2021.09.23 |
---|---|
[운영체제(OS)] 5. 프로세스 스케줄링(Process Scheduling) (1) | 2021.09.15 |
[운영체제(OS)] 4. 멀티쓰레드(Multithreaded Programming) (1) | 2021.09.14 |
[운영체제(OS)] 3. 프로세스(Process) (1) | 2021.09.10 |
[운영체제(OS)] 1. Overview (0) | 2021.09.03 |