OS Architecture
monolithic kernel
monolithic kernel | micro kernel |
단일체(monolithic)여서 OS 실행속도가 빠르다. 또한 Kernel 내부에 구현되어 있어서 내부함수로 call이 진행된다. 예: UNIX, Linux |
Kernel 밖에 구현되어 있어서 Kernel 내부에 남아있는 기능이 적다. 그렇기에 Kernel의 크기가 상대적으로 작다. 장점: 확장성, 메모리공간 등에 유리하며 운영체제에 영향을 주지 않고 Kernel 수행이 쉽다. 또한 신뢰성과 유연성이 높고 분산시스템의 support가 쉽다. 단점: OS실행 시 Kernel 밖과 Kernel이 서로 주고받아야 하기에 실행속도가 느리다. |
OS 예: UNIX, Linux, Windows, Real-time OS(실시간 OS로 내장형 시스템의 OS)
<UNIX>
개발초기: 컴퓨터 제작회사의 컴퓨터 하드웨어에 맞는 OS였기에 각 회사의 OS에 맞는 응용프로그램을 만들어야 했고 system call도 따로 만들어야 해서 제조가 힘들었기에, UNIX를 개발
UNIX의 구조는 우측과 같은데 UNIX Kernel이 응용프로그램과 하드웨어 사이에 있다.
또한 응용프로그램이 OS에 접근하기 위해 System Call로 접근하는 것을 알 수 있다.
<Linux>
좋은 운영체제인 UNIX를 PC에서도 사용하고 싶어 C 개발자가 발전시킨 형태
우측과 같이 UNIX의 컨셉을 가져가지만 조금 더 빠른 운영체제를 위한 형태이기에 monolithic Kernel임을 알 수 있다. (system call은 동일하기에 응용프로그램을 고칠 필요가 없다.)
micro kernel
<Windows>
앞의 두 OS와 달리 micro-Kernel이며 Application처럼 System support processes와 Service processes가 Kernel밖의 사용자 모드에서 실행된다.(user mode)
Process란?
instruction들로 구성된 프로그램이 “실행상태”에 있는 것
(메인메모리에서 instruction들을 register에 잠시 저장한 후, cpu로 가져와 실행하는 것)
Process생성방법: process가 실행되는 중 OS에 새 process를 생성해달라고 요청하는 system call을 이용해 생성하게 된다.
<process의 3가지 구성요소>
code: instruction들의 집합
data: code 실행값의 집합
execution context: 운영체제 자원들의 집합
<Process 상태>
우측과 같이 나타낼 수 있다.
Dispatcher: Kernel 함수 中 하나로 실행될 process에게 cpu를 배정, 준비시킴
우측의 회색부분은 OS이며 Program Counter는 다음에 실행될 instruction의 주소를 저장한다.
Processor는 Bus를 통해 memory로 이동하며 그림의 예시에서는 8000번지로 간다.
<Two-State Process Model>
여기서 two state는 Running or Not-running을 의미한다.
Pause 구간에서는 실행을 잠시 중단하며 Enter는 process 진입, Exit에선 process 종료가 이루어 진다.
아래 그림에서 Queue는 Not-running 상태에서 데이터의 대기열 역할이다.
<Process Creation>
OS가 booting시 service process 생성
이미 있는 process가 자식 process를 생성
사람의 명령에 의한 생성
i) foreground(interactive) mode – 즉시 실행
ii) background(batch) mode – 프로그램 뒤애 &를 입력
<Process Termination>
정상적인 경우: Normal completion, Parent request
비정상적인 경우: Protection error, Arithmetic error, Invalid instruction
<Two-State Process Model>에서 Not-Running 상태에 대해 자세히 알아보자.
Ready state: process가 주어졌을 때 다시 실행가능한 상태
Blocked state: wait state, sleep state와 같은 말으로 다시 실행하지 않는 상태이다.
즉, cpu dispatch를 하지 않는상태이다.(∵할당해도 소용 없음)
위의 state transition을 조금 더 확장한 모델이 있다.
<Suspended Processes>
process는 메인메모리에 들어있어야만! 실행이 가능하다.
2가지의 상태가 있는데 다음과 같다.
Blocked/Suspend: block 상태에서 보조기억장치로 간다.
Ready/Suspend: ready 상태에서 보조기억장치로 간다.
if 메모리공간 부족으로 빈 메모리를 만들어야 한다면?
=> 어떤 process를 보조기억장치로 옮기고 그 process의 메모리를 회수해야한다.
이런 보조기억장치로 밀려난 process를 suspended process라 한다.
why? suspended process가 필요한가?
=> cpu가 I/O보다 빠르기 때문이다.
<Process Suspension의 필요성>
- 불필요하게 메인메모리를 차지하지 않게 하기 위함
Swapping
Timing: 가끔 실행되는 process에 대해 실행되지 않을 때 보조기억장치로 이동하는 것
Interactive user request, Paren process request, Other OS reason
<Process Control Block>
- 일명 PCB로 각 process 자료정보를 저장하는 자료구조
★ process마다 1개의 PCB를 할당한다! ★
<PCB의 구조>- OS내 프로세스는 이중연결리스트 구조로 관리한다.
Identifier (프로세스 식별자): 다른 프로세스와 구별하는 역할(like 주민번호), 불변값
State (현재 프로세스의 상태 기록)
Priority (프로세스의 우선순위 저장)
Program counter: register 역할
cf. 프로세스 재 실행시 끊김없이 실행되기 위해 재개시의 cpu의 register값을 memory에 저장해야 함
Memory pointers: memory 내 process의 주소값 저장
Address of memory context (program code, variables)
I/O status information (입출력 값 저장)
Accounting information (통계 정보값)
<PCB of LINUX>
task_struct를 바탕으로 다른 tast_struct process와 하부자료구조 공유가 쉬워지는
계층적 구조를 이루고 있다.
<process identification _프로세스 식별자>
다른 process와 구별하기 위해 정수값을 저장한다.
종류: 자신 식별자, 부모 식별자, 사용자 식별자
<process state information _프로세스 상태>
process state
CPU Registers
* General purpose registers
* Control and Status Registers (Program counter, Condition codes, Status information)
* Stack Pointers
<Process Control Information>
Scheduling & State Information-> 현 process 중단후 어떤 process를 실행할 건지 결정(즉, 다른 process를 cpu가 실행하게 해야할 때, 누구를 실행할 것인지 결정)
Priority
Inter-process Communication
Memory Management (주소값)
Process란? instruction들로 구성된 프로그램이 “실행상태”에 있는 것
(메인메모리에서 instruction들을 register에 잠시 저장한 후, cpu로 가져와 실행하는 것)
Process생성방법: process가 실행되는 중 OS에 새 process를 생성해달라고 요청하는 system call을 이용해 생성하게 된다.
<process 생성방법>
사람에 의한 방법
process (부모 process)에 의한 방법
<process의 3가지 구성요소>
code: instruction들의 집합
data: code 실행값의 집합
execution context: 운영체제 자원들의 집합
<Process 상태>
우측과 같이 나타낼 수 있다.
Dispatcher: Kernel 함수 中 하나로 실행될 process에게 cpu를 배정, 준비시킴
우측의 회색부분은 OS이며 Program Counter는 다음에 실행될 instruction의 주소를 저장한다.
Processor는 Bus를 통해 memory로 이동하며 그림의 예시에서는 8000번지로 간다.
<Two-State Process Model>
여기서 two state는 Running or Not-running을 의미한다.
Pause 구간에서는 실행을 잠시 중단하며 Enter는 process 진입, Exit에선 process 종료가 이루어 진다.
아래 그림에서 Queue는 Not-running 상태에서 데이터의 대기열 역할이다.
<Process Creation>
OS가 booting시 service process 생성
이미 있는 process가 자식 process를 생성
사람의 명령에 의한 생성
i) foreground(interactive) mode – 즉시 실행
ii) background(batch) mode – 프로그램 뒤애 &를 입력
<Process Termination>
정상적인 경우: Normal completion, Parent request
비정상적인 경우: Protection error, Arithmetic error, Invalid instruction
<Two-State Process Model>에서 Not-Running 상태에 대해 자세히 알아보자.
Ready state: process가 주어졌을 때 다시 실행가능한 상태
Blocked state: wait state, sleep state와 같은 말으로 다시 실행하지 않는 상태이다.
즉, cpu dispatch를 하지 않는상태이다.(∵할당해도 소용 없음)
위의 state transition을 조금 더 확장한 모델이 있다.
<Five-state Process Model>
<Suspended Processes>
process는 메인메모리에 들어있어야만! 실행이 가능하다.
2가지의 상태가 있는데 다음과 같다.
Blocked/Suspend: block 상태에서 보조기억장치로 간다.
Ready/Suspend: ready 상태에서 보조기억장치로 간다.
if 메모리공간 부족으로 빈 메모리를 만들어야 한다면?
=> 어떤 process를 보조기억장치로 옮기고 그 process의 메모리를 회수해야한다.
이런 보조기억장치로 밀려난 process를 suspended process라 한다.
why? suspended process가 필요한가?
=> cpu가 I/O보다 빠르기 때문이다.
<Process Suspension의 필요성>- 불필요하게 메인메모리를 차지하지 않게 하기 위함
Swapping
Timing: 가끔 실행되는 process에 대해 실행되지 않을 때 보조기억장치로 이동하는 것
Interactive user request, Paren process request, Other OS reason
<Process Control Block>- 일명 PCB로 각 process 자료정보를 저장하는 자료구조
★ process마다 1개의 PCB를 할당한다! ★
<PCB의 구조>- OS내 프로세스는 이중연결리스트 구조로 관리한다.
Identifier (프로세스 식별자): 다른 프로세스와 구별하는 역할(like 주민번호), 불변값
State (현재 프로세스의 상태 기록)
Priority (프로세스의 우선순위 저장)
Program counter: register 역할
cf. 프로세스 재 실행시 끊김없이 실행되기 위해 재개시의 cpu의 register값을 memory에 저장해야 함
Memory pointers: memory 내 process의 주소값 저장
Address of memory context (program code, variables)
I/O status information (입출력 값 저장)
Accounting information (통계 정보값)
<PCB of LINUX>
task_struct를 바탕으로 다른 tast_struct process와 하부자료구조 공유가 쉬워지는
계층적 구조를 이루고 있다.
<process identification _프로세스 식별자>
다른 process와 구별하기 위해 정수값을 저장한다.
종류: 자신 식별자, 부모 식별자, 사용자 식별자
<process state information _프로세스 상태>
process state
CPU Registers
* General purpose registers
* Control and Status Registers (Program counter, Condition codes, Status information)
* Stack Pointers
<Process Control Information>
Scheduling & State Information-> 현 process 중단후 어떤 process를 실행할 건지 결정(즉, 다른 process를 cpu가 실행하게 해야할 때, 누구를 실행할 것인지 결정)
Priority
Inter-process Communication
Memory Management (주소값)
'Computer System > 운영체제' 카테고리의 다른 글
this->OS.code(6) (0) | 2022.10.31 |
---|---|
this->OS.code(5) (0) | 2022.10.31 |
this->OS.code(4) (0) | 2022.10.31 |
this->OS.code(3) (0) | 2022.10.31 |
this->OS.code(1) (0) | 2022.10.30 |