운영체제 Chapter4 Threads - 3월 21일 화요일

Jimin·2023년 3월 22일
0

Operation System

목록 보기
9/34

한 프로그램 안에 여러개의 Thread를 생성한다.

여러개의 Thread를 만드는 것과 여러개의 Process를 만드는 것의 차이를 알아야 한다.


fork()

Parent Process가 Child Process를 만들라는 명령어

→ Child Process는 Parent Process의 모든 코드를 copy해간다.

fork();

for(int i=0;i<10;i++) {
	sleep(1);
}

↑ 위의 프로그램은 시작하자마자 Child Process를 하나 만들고 시작한다.

자식 프로세스는 부모 프로세스의 코드 모든 것을 복사하기 때문에 자식도 for문을 돌린다.

→ 즉 for문을 두 개의 프로세스가 각각 0부터 9까지 출력한다.

Process가 fork 되면 본인 프로세스가 부모인지 자식인지 알 수 없기 때문에 return 값이 0인지 1인지로 구분하여 판단한다.


Q. 하나의 Program이 하나의 Process인가?

→ X

하나의 Program은 n개의 Process를 가질 수 있다.


Q. 하나의 Process는 하나의 Program에 속하는가?

→ X

하나의 Process는 A, B, C, ... Program을 바꿔가면서 실행시킬 수 있다.


⇒ Process : Program = n : n

각각의 Process는 각각 별개의 실행 단위이다.
Ready Queue에 줄 서 있을 때 OS 입장에서 같은 프로그램에서 온 Process인지는 중요하지 않다.
OS는 어떤 프로그램에서 온 애를 구별하지 않고 각각 독립적인 프로세스로 판단한다.


Process가 아니라 Thread가 여러개 생성된 경우
MultiThreading

  1. 실행하는 Process는 한가지이다.

  2. 두 개의 Thread는 하나의 같은 Proces 안에 들어 있다.
    → 각각의 Thread가 독립된 실행 단위로 Ready Queue에 들어가 있으면, OS는 같은 Process에서 나왔는지 확인하지 못한다.

  3. Process가 만들어질 때 Code, Data, PCB, Stack 가 만들어지는데,
    다른 Process에서는 서로 다 다르다.

    하지만 Process가 같으면 하나의 Process에서 만들어진 Thread끼리는 Code, Data(전역 변수), PCB, Stack를 모두 공유한다.

  4. Multi Threading 에서는 한 프로그램 안에서 여러 function들을 동시에 실행시킨다.

Thread = 별개의 실행단위로, 하나의 Process 안에 들어있다.

profile
https://github.com/Dingadung

0개의 댓글