※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


이전 포스팅에서 설명했듯이 OS는 프로세스 관리, 메로리 관리, storage 관리 등등을 수행한다. 조금 중복되는 내용일지는 모르겠으나 OS의 기능을 조금 더 자세하게 구분해보자.

OS의 역할을 사용자를 돕는 부분과 시스템을 돕는 부분으로 나눠 보자.

사용자 역할 돕는 부분

user interface : GUI, Batch, CLI

program execution : 메모리에 load하는 것

I/O operations : file & I/O devices

File systems : creating and deletion file or directory

communication : 프로세스끼리의 정보 공유 (done by memory-share and message passing)

error detection : error 처리

 

시스템 역할 돕는 부분

resource allocation : 메모리 할당

accounting : 누가 어떤 종류의 resource를 사용하고 있는지

protection and security : 할당된 메모리 침범

 

이와 같이 OSOS의 역할을 하기 위해서 무엇이 필요할까?

 

이것을 설명하기 전에 우선 OSDual mode를 설명하자.

OS는 두 가지 모드로 동작 가능하다. 유저 모드와 커널 모드이다.(유저 모드와 커널 모드는 동시에 동작하지 않는다.) 유저 모드는 OS가 어플리케이션 프로그램을 수행하고 있을 때의 모드를 뜻하고 커널 모드는 OS가 시스템 프로그램을 수행하고 있을 때를 말한다. 컴퓨터가 동작하는 동안 OS는 이 두 모드를 왔다 갔다 한다.

그러면 언제 유저 모드 커널모드 이고 언제 커널 모드 유저 모드인가? 이 두 모드는 Trap이나 Interrupt에 의해 변한다.

 

Trap : In computing and operating systems, a trap, also known as an exception or a fault, is typically a type of synchronous interrupt typically caused by an exceptional condition (e.g., breakpoint, division by zero, invalid memory access)

Interrupt : In systems programming, an interrupt is a signal to the processor or an instruction in software usually indicating an event that needs immediate attention. An interrupt signals the processor of a high-priority condition requiring the interruption of the current code the processor is executing, the current thread.

위키피디아에 따르면,

Trap은 예외 처리된 상태에 의해 야기된 interrupt 또는 system call이다. 그 예로 breakpointdivided-by-zero 등등이 있다. , OS에 의해 이미 예측된 내용들이다. 반면, InterruptOS가 예측하지 못 한 프로세서의 signal이나 OS가 즉각적으로 처리해주어야 하는 Instruction들을 의미한다. 키보드에서 사람이 타자를 치는 것도 모두 Interrupt이고, starcraft를 실행하거나 마린을 움직이는 것 역시 모두 Interrupt이다.


Interrupt는 OS에서 상당히 중요한 부분이기 때문에 Interrupt가 Interrupt Service Routine(ISR)에 의해 어떻게 동작하는지 알 필요가 있다. 

[링크] http://operatingsystems.tistory.com/entry/4-Interrupt-Service-Routine-ISR


OS가 부팅을 할 때에는 커널 모드로 부팅이 된다. 이 상태에서 새로운 Interrupt , 사용자에 의해 새로운 프로세스가 실행되거나 할 때 유저모드로 변하게 된다. 그럼 왜 굳이 모드가 변하는가? 안 변하고 그냥 계속 커널 모드로 혹은 유저 모드로 작동하면 안 되나? 안 된다. 왜냐하면 보안을 위해서이다. 시스템을 수행하는데 있어 굉장히 중요한 몇몇 함수들은 커널모드에서 밖에 작동하지 않는다. 모드를 구분하지 않으면 그러한 함수들에 접근하는 것을 막을 수 없다.

 

모드 전환을 이해하려면 System Call Interface를 이해하면 좋다.


위의 그림에서 볼 수 있듯이, OS는 커널 함수들과 System Call함수들로 이루어져있다. System Call들은 커널 함수에 비하면 굉장히 적다. 대부분의 커널 함수는 System Call함수을 통해 사용자가 불러올 수 있다. , system call은 사용자가 kernel 함수를 사용할 수 있도록 해주는 중간 매개체이다.(그래서 system call interface이다.)

 

이제 다시 본래의 질문으로 돌아가자.

OSOS의 역할을 하기 위해서 무엇이 필요할까? 바로 system call이다. system call이 있어야 application programkernel 함수 등을 사용할 수 있다. 위에서도 말했듯이 kernel 함수는 OS의 주된 역할을 담당하는 함수들이다. 그렇다면 system call 역시 OS처럼 역할이 구분될 수 있을 것이다.

ex) a라는 system call interfacememory management를 담당하는 kernel 함수를 호출하고, b라는 system call interfaceprocess management를 담당하는 kernel 함수를 호출한다.

 

주요 system call 함수는 아래와 같다.

Process control

- end, abort

- load, execute

- create process, terminate process

- get process attributes, set process attributes

- wait for time

- wiat event, signal event

- allocate and free memory

File management

- create file, delete file

- open, close

- read, write, reposition

- get file attributes, set file attributes

Device management

- request device, release device

- read, write, reposition

- get device attributes, set file attrubutes

- logically attach or detach devices

Information maintenance

- get time or date, set time or date

- get system data, set system data

- get process, file, or device attributes

- set process, file, or device attributes

Communications

- create, delete communication connection

- send, receive messages

- transfer astatus information

- attach or detach remote devices


위에서 볼 수 있듯이 각각의 system call은 역할을 가지고 있는데, 그 역할이 꼭 OS의 역할과(OS에서의 Kernel 함수) 같다.

 

이제 system call이 어떻게 호출되는지를 알아보자. system call이 호출되려면 위에서 설명한 trap이나 interrupt가 있어야 한다. system call이 발생하는 과정을 간략하게 설명하면 다음과 같다.




Operating System Structures

OS의 구조를 살펴보자. 애초의 MS-DOS는 다음과 같은 simple한 구조를 취했다고 한다.


application이 직접 I/O를 다룰 수 있게 되어있다. 취약하다!!

 

그래서 다음과 같은 layered approach를 고안하게 된다.

Kernel과 "shells and commands ..." 이 두 부분이 OS를 이루는 구조이고 그 위에는 사용자, 그 밑에는 하드웨어. 이렇게 구조를 띈다. 이러한 구조는 몇 가지 장점이 있다.

1. OS 개발할 때 디버깅과 구조화 등을 쉽게 한다.

2. low-level routine이 변경되지 않도록 보장한다.(그럼 위에서 봤던 MS-DOS는 그게 가능한가? 사실 조금 추상적이다;; 이해가 제대로 안 됐음;;)

단점도 있으나 굳이 말하지 않겠다.

 

이외에도 microkernel를 이용한 방법과 Modules를 이용한 방법이 있다.

Microkernel : 마이크로커널은 커널을 필수적으로 필요한 함수들의 집합으로 압축시켜놓은 커널이다. 몇 가지 필요 없는? 기능들을 커널로부터 제거하고 진짜 필요한 것들로만 이뤄놓은 것이다. 그러다보니 크기가 작아져서 마이크로커널이라고 부른다.

Modules : 필수적으로 필요한 kernel함수의 집합인 core kernel을 가지고 있다는 점에서 microkernel과 비슷하지만, 다른 추가적인 서비스(device driver, file system, scheduling classes 등등)들이 동적으로 execution-timelink된다는 점에서 Microkernel의 접근 방법과 다르다.

Modules를 사용하는 방법이 Microkernel보다 효율적이라네? message passing을 사용하지 않기 때문이라는데... 그렇다면 microkernelmessage passing을 사용한다는 말인가? 그리고 그렇다면 modules는 어떤 방법으로 communication을 구현할까?

'Operating Systems' 카테고리의 다른 글

[OS] 프로세스 상태(Process State)  (2) 2012.12.31
[OS] Interrupt Service Routine (ISR)  (2) 2012.12.24
[OS] OS의 역할  (0) 2012.12.24
[OS] 운영체제 공부를 시작하기에 앞서...  (3) 2012.12.24
시작하며...  (0) 2012.12.15
Posted by 빛나유
,