티스토리 뷰
반응형
Process Memory Layout
- Normal function을 실행하면 stack영역을 사용한다. System call은 kernel stack에서 사용 후 결괏값을 stack 영역에 저장한다.
- System call을 호출할 때마다 프로세스 1개당 kernel stack 1개를 할당한다.
- Stack 영역
- 함수들이 호출될 때 아래로 차면서 데이터가 저장된다.
- Heap 영역
- 동적 메모리가 요청될 때 위로 차면서 데이터가 저장된다.
- Data segment
- 전역변수가 저장된다.
- Text segment
- 바이너리 프로그램 코드가 저장된다.
- 왜 프로세는 Physical memory의 같은 Kernel memory 영역을 공유하지?
- 물리적으로는 1대의 컴퓨터에 1개의 OS만 사용 가능하다. 하지만 1개의 프로세스당 1개의 커널 영역이 필요하다. 프로세스가 여러 개면 여러 개의 커널 영역이 필요해지기 때문에, 이를 해결하기 위해 공유된 커널 메모리를 사용한다.
- 가상 메모리 (Process 1 & 2)에서 같은 주소의 메모리를 사용해도 상관이 없다.
- why? Physical memory에 있는 주소로 매핑될 때 다른 주소로 변환되기 때문. But, kernel memory 영역에서 같은 주소의 메모리를 사용하면 충돌이 발생한다.
Process State
Process Control Block (PCB)
- PCB
- 커널 내에서 프로세스를 중요한 정보를 가지고 있는 운영체제의 자료구조
- Process state: new, ready, running, waiting, terminated와 같은 상태를 저장
- Process number: 프로세스 고유번호
- Program counter: 프로세스가 실행할 instruction의 주소
- Register: CPU 레지스터
- Memory 관리 정보: 페이지 테이블, memory limit 또는 세그먼트 테이블 등과 같은 정보를 포함.
- I/O 상태 정보 프로세스에 할당된 입출력 장치들과 열린 파일 목록.
Process Switch and PCB
Scheduler
- Long-term 스케줄러 (Job scheduler)
- 스케줄링 알고리즘에 따라 디스크 내의 작업을 메모리로 load
- Short-term 스케줄러 (CPU scheduler)
- 메모리에 있는 프로세스 중 하나를 선택해서 CPU에 할당하고 연산한다.
- 프로세스의 종류
- I/O bound 프로세스
- CPU-bound 프로세스
- Long-term 스케줄러는 반드시 I/O-bound 작업과 CPU-bound 작업의 적절한 조합을 선택해야 한다.
- why? CPU-bound 작업만 선택해서 처리하게 되면 모든 프로세스가 CPU만을 사용하고, I/O device는 비 가동 상태가 되기 때문
Operations on Processes
- 프로세스 생성에 대한 resource
- Execution type
- 부모 & 자식 프로세스가 동시에 작업을 수행을 하는 경우
- 부모 프로세스가 자식 프로세스의 작업이 끝날 때까지 대기하는 경우
- Execution type
- 새로운 child 프로세스 생성
- Program type
- 자식 프로세스가 부모 프로세스의 복사본인 경우 (fork() 함수 실행시)
- 자식 프로세스가 완전히 새로운 프로그램인 경우 (exec() 함수 실행 시).
- Program type
- fork() system call
- 완전히 새로운 프로세스를 생성한다.
- 부모 프로세스를 복제한 프로세스인 경우. 부모 프로세스와 PID만 다르다.
- 부모와 자식 프로세스는 fork() 호출 이후 동시에 실행한다.
- 완전히 새로운 프로세스를 생성한다.
- exec() system call
- 현재 프로세스 메모리 공간을 새로운 프로그램으로 대체한다.
- Binary 파일을 메모리로 로드하고 실행한다.
- 현재 프로세스 메모리 공간을 새로운 프로그램으로 대체한다.
- wait() system call
- 부모 프로세스가 자식 프로세스의 작업이 끝나고 terminate 되기까지 대기하기 위해 호출한다.
- 만약 부모 프로세스가 wait()를 한 번도 호출하지 않는다면?
- 좀비 프로세스가 쌓인다. 하지만 'init' 프로세스가 주기적으로 wait()를 호출해서 자식 프로세스의 자원을 release 한다.
Interprocess communication (IPC)
- IPC는 프로세스들이 데이터와 정보의 교환을 가능하게 한다.
- 2 Types of IPC
- Shared memory
- 운영체제의 도움으로 메모리의 영역이 공유된다.
- 프로세스는 간단하게 메모리로 읽기/쓰기를 한다.
- 변경사항이 바로 모든 프로세스에게 보인다.
- 단일 시스템에서만 가능하다. (1대의 컴퓨터에서만 사용 가능)
- 공유된 메모리 영역만 알면 된다.
- Message passing
- 데이터가 메시지로써 전송된다.
- 분산 시스템에 적합하다.
- 상대 프로세스를 정확하게 알아야 한다.
- Shared memory
- Shared memory system
- 메모리를 공유하는 프로세스는 주소 공간의 메모리 영역을 준비한다.
- 다른 프로세스들은 공유된 메모리를 자신들의 주소 공간에 할당한다.
- 프로세스들 간의 메모리 접근 제한을 제거하기 위해 OS의 도움이 필요하다.
- 공유된 메모리를 어떻게 사용할지는 프로세스에게 달려있다. (OS는 관여하지 않는다.)
- Message-passing system
- 분산시스템에 적합하다.
- Send와 Receive 연산이 있다.
- 상대 프로세스를 명시하는 직접통신과 메시지 박스를 경유한 간접 통신이 있다.
Pipes
- Ordinary pipe
- 두 개의 프로세스가 producer와 consumer로써 통신한다. (통신은 단방향성이다.)
- Ordinary pipe의 생성 (Unix 시스템만 해당)
- pipe(int fd[])
- fd[0]: read-end, fd[1]: write-end
- 파이프를 생성한 프로세스(부모 프로세스)에 의해서만 접근이 가능하다.
- pipe(int fd[])
- Named pipe
- 양방향(bidirectional) 통신이다.
- half-duplex 통신이다. (양방향으로 동시에 데이터 전송이 불가능하다.)
- 부모-자식 관계가 성립하지 않는다.
- 한 번 생성되면 여러 프로세스가 사용할 수 있다.
- 생명주기가 프로세스에 묶여있지 않다.
- 프로세스들은 반드시 물리적으로 같은 PC에서 작동하고 있어야 한다.
반응형
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
[운영체제] 데드락 (0) | 2019.10.30 |
---|---|
[운영체제] 프로세스 스케줄링 (0) | 2019.10.29 |
[운영체제] 멀티스레드 프로그래밍 (0) | 2019.10.29 |
[운영체제] 시스템 구조 (0) | 2019.10.28 |
[운영체제] 개요 (0) | 2019.10.28 |
댓글
링크
공지사항
최근에 달린 댓글
- Total
- Today
- Yesterday