OS는 Complexity 소프트웨어 시스템이다.
이를 해결하는 우리의 무기
Abstraction
이를 시스템 디자인에 적용하면 Layerd Arckitecture가 나옴
바닥은 하드웨어, 이 위에는 OS, 그 위에 라이브러리/미들웨어, 이 위에 애플리케이션들이 수행된다
여기서 각 레이어의 역할은 그 아래 복잡한 것들을 보이지 않게, 꼭 필요한 인터페이스만 위로 보이게 한다
레이어와 레이어 사이에 있는 층
API(Application Programming Interface) | 계층과 계층 사이의 통신을 위해 정의된 호출 규약
각 레이어가 만나는 곳에 존재한다.
이와 같이 아래 계층의 복잡함을 추상화시켜서 보여주는 것이 Abstraction
이 결과로 레이어드 아키텍쳐가 존재하게 된다.
Layering Principle
위 계층은 아래 계층이 제공하는 기능만을 사용할 수 있으며 반대의 경우는 발생하지 않아야 한다
필요 이유 => OS 위 여러 타입의 애플리케이션이 올 수 있게 허용되어야 하는데, 종속관계에 있으면 불가능해진다.
아래 계층 -> 윗계층 : 추상화 제공
Decomposition
추상화를 구체화하는 것
Process creation과 Terminations
새로운 process가 생성되면 OS가 그 process의 context를 build해주어야 한다.
그게 process creation
Process creation
일반적으로 process를 create한다 라고 하면 data structure을 allocation받는것
memory 세그먼트에는 stack이 필요하다.
heap도 생성.
process의 정보를 담은 process control black을 만들어 채우게 된다.
마지막으로 그렇게 생성된 pcb를 ready queue에 넣으면 된다
=> 일반적으로 생각할 수 있는 프로세스 생성의 방법.
그런데 unix 계열의 OS는 시스템이 부팅할 때 딱 한번 0번 process만 이방법으로 생성되고
나머지는 다른 방식으로 생성된다.
cloning
이 복제를 하는 시스템 콜을 fork라고 한다
unix에는 프로세스를 생성하라고 명령을 내리는 다른 프로세스가 있어야 한다.
Parent Process | Process Cloning을 초래하는 기존의 Process
Child Process | Parent Process로부터 만들어지는 새로운 Process
질문
fork() System Call이 가지는 문제점은?
- 매번 fork를 하고 복사하는게 매우 비효율적이다
- 맨 처음 만든 Process와 다른 Process는 수행할 수 없다
그래서 Unix은 fork() 후 exec()를 하게 된다.
이 방법을 이용해 2번을 해결할 수 있음.
하지만 비효율적.
parent에서 fork를 해서 wait으로 보내고
fork된 child는 exec을 하고 다 끝나면 exit을 수행. 이것이 바로 프로세스를 종료시키는 system call
exit한다는 말은 exit이 잘 되었나 안 되었나 코드값을 남겨두고 나머지를 걷어간다.(exit status)
parent가 이를 읽어간다. 이 사이 기간을 좀비 state라고 한다고 하심🧟♂️
질문
그런데 왜 fork 방법을 이용했을까?
=> 초창기 unix에서는 process와 process가 커뮤니케이션 할 수 있는 방법은 fork밖에 없었다.
이런 이유로 fork mechanism을 이용한 것
fork의 나쁜 성능을 어떻게 해야 할까?
=> 새로운 메커니즘 개발. COW | Copy On Write
Process Context를 fork시점에 복사하지 않고 Data Segment에 새 값이 쓰여질 때 복사하는 기법
따라서 이제는 불필요한 Copy나 성능 저하는 없어졌다.
Process termination
exit을 호출해서 주는 방법이 있고
kill (시그널을 보내서 abort)
로 process의 수행을 종료한다
'👨💻 CS지식' 카테고리의 다른 글
[ SNU 강의 ] CPU Scheduling | 쉽게 배우는 운영체제 8,9주차 (0) | 2022.08.11 |
---|---|
[ SNU 강의 ] Multithreading | 쉽게 배우는 운영체제 7주차 (0) | 2022.07.18 |
[ SNU 강의 ] 운영체제의 기초 | 쉽게 배우는 운영체제 5주차 (0) | 2022.07.11 |
📢 공지 (0) | 2022.07.07 |
[ 네트워크 ] TCP/IP 네트워크 기초 상식 (0) | 2022.07.07 |