[운영체제] 3. Processes
프로세스의 개념
Process : A program in execution
한 마디로 프로세스란? 실행중인 프로그램
program, process, processor 혼용해서 사용하기도
(+) processor : 프로세싱하는 주체 (CPU)
메모리에서의 프로세스
메모리 구조
- Stack : 지역변수, 매개변수 호출 시
- Heap : 동적 메모리 할당 (C언어의 malloc)
- Data : static (전역 변수, 상수)
- Text : 프로그램 코드
이거 진짜 시험 단골 문제인 듯
OS가 프로세스 관리 하는 법
- 프로그램 실행 -> Disk(하드디스크)에서 메모리로 프로그램 올림 (위의 구조)
OS는 PCB(Process Control Block)으로 프로세스 관련 정보를 struct(구조체) 형태로 저장해서 관리한다!
PCB (Process Control Block)
: 프로세스 정보를 데이터 구조화 해서 리스트로 관리를 한다.
구조체 형태로 저장함
struct{
int pid
int state
.
.
// 이런 형태로
}
- Process State : 프로세스 상태
New
Running : CPU에 실행 중
Wait : event 발생 기다릴 때, I/O request 기다릴 때
Ready : 일 끝나고 CPU 쓸 수 있는 상태 (CPU 준비)
Terminated : 종료
- Program Counter
: PC - CPU 안의 특별한 레지스터, 다음 실행 명령어의 주소를 저장한다! - CPU register
Q) 레지스터는 왜 기억하고 그대로 복사하는가?
A) 변수는 메모리에 저장된다. CPU 쓰다가 쫓겨나면 쓰던 값으로 복사해야 다시 running할 때 다시 계속 실행할 수 있다
계속 하던 일 계속하게!
쫓겨날 때(interrupt or system call)copy하고 다시 불려오면 복붙(reload)한다. Memory는 항상 그대로, CPU는 지워진다. 메모리에서 CPU로 명령어를 가져와서 실행, 그 다음 명령어 가져와서 실행,,, (무한 반복)
이 PCB를 저장하고 로드 하는 과정이 바로 Context Switch
++ CPU 안에 레지스터 있다. - CPU scheduling information
- Memory-management information
- Accounting information
- I/O status information
OS도 프로그램임을 잊지 말자.
Process State
- New
- Running : CPU에 실행 중
- Wait : event 발생 기다릴 때, I/O request 기다릴 때
- Ready : 일 끝나고 CPU 쓸 수 있는 상태 (CPU 준비)
- Terminated : 종료
Q) interrupt는 왜 발생하는가?
A) 스케쥴링 방식에 따르다. CPU 쓰고 있다가도 못 쓰게 되는 상황이 온다.
Running -> Waiting은 주로 값 요청하고 그 값 기다릴 경우가 많다.
Context Switch
멈추고 프로세스를 교체한다.
실행되던 상태를 PCB에 저장하고 이제 실행할 프로세스의 상태를 CPU에 넘긴다(로드).
이 프로세스 교체는 공짜인가?
전혀 아니다! 항상 교체할 때는 교체 시간인 오버헤드(Overhead)가 발생한다! PCB를 저장하고 로드하는데 시간이 필요하다는 뜻.
Process Creation
++ fork해서 반환되는 pid의 값이 음수면 실패한 것이다
Unix에서의 예시
-
fork() : 프로세스 생성
fork()가 실행되면 해당 프로세스 0(Parent Process)의 PCB0가 고대로 복사해서 새로운 자식 프로세스 1(Child Process)과 PCB1을 만든다.
그리고 fork 다음부터 기존 프로세스 0과 동일하게 쭉 동작한다! -
exec() : 현재 실행할 프로세스를 바꾼다 (= execlp() )
실행하는 순간 코드 영역을 지우고 execlp 안의 프로그램을 카피해서 로드한다.
과제로 프로세스 4개를 구현해보라는 과제가 나왔는데 fork를 2번만 하면 되었다.
8번은 fork가 3번이면 된다.fork되는 순간 프로세스는 복제되어 그 다음부터 똑같이 복제되어 같이 실행된다. 그러니까 fork를 한 번 부르면 2개, 다음 fork에서 2개의 프로세스가 fork를 만나 2개로 늘어난다.
1 -> 2 -> 4 -> 8 -> 16 -> ...
Process Termination
- exit() 이 시스템 콜을 호출해서 끝낸다.
Communications Models
프로세스 A와 B가 값을 공유하는 방식
IPC라고도 한다.
IPC (Inter Process Communication)
프로세스 간의 통신
(a) : Message Passing
편지 주고 받는 것 처럼 Send하고 Receive하며 값을 주고받으며 사용한다.
(b) : Shared Memory (공유 메모리)
공유 메모리를 같이 접근하여 값을 사용한다.
Pipes
두 프로세스가 통신하는 방법이다.
굉장히 원시적으로 단방향이다. 쓰기만 하고, 읽기만 하고.
그래서 양방향으로 쓰려면 파이프를 2개 사용하여야한다.
Author And Source
이 문제에 관하여([운영체제] 3. Processes), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/운영체제-3.-Processes저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)