운영체제
운영체제 Chatper 4 4-1 Thread
by PlusUltraCode
2024. 7. 18.
프로세스와 스레드의 차이
1. 프로세스 (Process)
- 정의: 실행 중인 프로그램의 인스턴스.
- 생성 방법: fork() 함수를 사용하여 부모 프로세스에서 자식 프로세스를 생성.
- 특징:
- 부모 프로세스의 모든 코드를 복사하여 자식 프로세스를 생성.
- 프로세스는 독립적인 실행 단위이며, 서로 메모리를 공유하지 않음.
- 각 프로세스는 고유한 코드, 데이터, PCB, 스택을 가짐.
- 운영 체제는 프로세스의 독립성을 유지하며, 같은 프로그램에서 생성된 프로세스인지 여부는 중요하지 않음.
2. 스레드 (Thread)
- 정의: 프로세스 내에서 실행되는 독립적인 실행 단위.
- 생성 방법: 프로세스 내에서 여러 스레드를 생성하여 동시 실행.
- 특징:
- 동일한 프로세스 내에서 스레드들은 코드, 데이터, PCB, 스택을 공유.
- 스레드는 프로세스 내에서 여러 함수들을 동시에 실행할 수 있게 함.
- 멀티스레딩 환경에서는 하나의 프로세스 안에 여러 스레드가 존재하며, 운영 체제는 각 스레드를 독립적인 실행 단위로 처리.
fork() 함수 사용 예시
#include <unistd.h>
#include <stdio.h>
int main() {
fork(); // 자식 프로세스를 생성
for(int i = 0; i < 10; i++) {
sleep(1);
printf("%d\n", i); // 부모와 자식 프로세스가 각각 0부터 9까지 출력
}
return 0;
}
- 이 프로그램은 시작하자마자 fork()를 통해 자식 프로세스를 생성.
- 부모와 자식 프로세스는 각각 독립적으로 0부터 9까지 출력.
프로그램과 프로세스, 프로세스와 프로그램의 관계
- 프로그램과 프로세스
- 하나의 프로그램은 여러 개의 프로세스를 가질 수 있음.
- 프로세스와 프로그램
- 하나의 프로세스는 여러 프로그램을 실행할 수 있음.
- 프로세스는 프로그램의 실행 인스턴스이므로, 특정 프로그램에 한정되지 않음.
멀티스레딩 (MultiThreading)
- 특징:
- 하나의 프로세스 내에서 여러 스레드가 실행.
- 스레드들은 동일한 프로세스의 자원을 공유하며, 동시에 여러 작업을 수행.
- 운영 체제는 각 스레드를 독립적인 실행 단위로 처리하므로, 동일 프로세스 내의 스레드인지 여부는 중요하지 않음.
- 예시:
- 이 프로그램은 두 개의 스레드를 생성하여 각각 0부터 9까지 숫자를 출력.
-
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* print_numbers(void* arg) {
for(int i = 0; i < 10; i++) {
sleep(1);
printf("%d\n", i);
}
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, print_numbers, NULL);
pthread_create(&thread2, NULL, print_numbers, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
요약
- 프로세스는 독립적인 실행 단위로, 각 프로세스는 메모리를 공유하지 않으며 독립적으로 실행됨.
- 스레드는 프로세스 내의 독립적인 실행 단위로, 동일 프로세스 내의 다른 스레드와 메모리를 공유함.
- 멀티스레딩은 하나의 프로세스 내에서 여러 스레드를 생성하여 동시에 여러 작업을 수행하는 방법.