# 프로세스
- 실행 중인 프로그램
- 메모리, 파일, 프로세스간 통신(IPC), 어카운팅(컴퓨터를 얼마나 썼는지)
- CPU 레지스터 정보, 스케줄링 정보
- 자원을 가지고 있음
- 현대 OS에서 프로세스는 태스크(task) 및 쓰레드(thread) 라는 두 객체로 분리
- 쓰레드란 실행되는 단위, 제어의 단위
- 쓰레드는 프로세스의 하위 집합(subset)
- 한 개 이상의 여러 개의 쓰레드로 구성됨
# fork()
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
int a[4] = {1,2,3,4}; int b[4];
void *func1() {
b[0] = a[0] + 1; b[1] = a[1] + 1;
printf("In func1: %d\n", b[0]);
}
void *func2() {
b[2] = a[2] + 1; b[3] = a[3] + 1;
printf("In func2: %d\n", b[2]);
}
int main(void) {
int pid;
// child 프로세스를 생성하여 func1()을 수행
if ((pid = fork()) < 0)
exit(1);
else if (pid == 0) {
func1();
exit(0);
}
wait();
func2();
printf("sum=%d\n", b[0]+b[1]+b[2]+b[3]);
exit(0);
}
- fork()는 자식 프로세스 생성함
- pid==0, 자식 프로세스인 경우 func1() 실행
- exit(0) 삭제시 자식프로세스가 계속 수행됨
- exit(0) 하면 자식 프로세스 끝남, 부모 프로세스는 모름
- 자식 프로세스 종료되고 부모 프로세스 실행 (자식 프로세스 값 받아옴)
# POSIX thread
- 포식스 쓰레드
- pthread_create(3) 함수 : 새로운 쓰레드 생성, worker(작업) 생성 => fork()
- 첫번째 arg 는 pthread에 대한 포인터, 쓰레드가 생성되면 이 포인터가 가리키는 변수에 id를 저장
- gcc -o test test1.c -lpthread
- pthread_join() : worker를 join 함
#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int a[4] = {1,2,3,4};
int b[4];
void *func1() {
b[0] = a[0] + 1;
b[1] = a[1] + 1;
printf("In func1: %d\n", b[0]);
}
void *func2() {
b[2] = a[2] + 1;
b[3] = a[3] + 1;
printf("In func2: %d\n", b[2]);
}
int main() {
pthread_t p_thread;
if ((pthread_create(&p_thread, NULL, func1, (void*)NULL))< 0)
{
exit(1);
}
pthread_join(p_thread, (void **)NULL);
func2();
printf("sum=%d\n", b[0]+b[1]+b[2]+b[3]);
}
- 쓰레드와 프로세스 수행되는 게 다름
# 단일 쓰레딩 - 하나의 쓰레드
# 다중 쓰레딩 - 하나의 프로세스 내에 여러 개의 쓰레드
# 전면 (foreground)
- 현재 실행되고 있는 것
# 후면 (background)
- 실행 대기중, 창으로 띄워져있음
# 비동기 (asynchronous)
# 코어 - cpu에서 계산 기능 가짐
****************** 과제 *******************
책 p211 연습문제 4.9
1) 그대로
2) 명령 순서 바꾼 후 실행
3) cpu에서 2쓰레드 동시에 실행, 교대로 실행, 1과 2를 총 20회 출력
re-enrant 코드
'전공 공부 > 운영체제' 카테고리의 다른 글
운영체제 12주차 강의 (0) | 2021.05.18 |
---|---|
운영체제 11주차 강의 (0) | 2021.05.11 |
운영체제 7주차 강의 (0) | 2021.04.13 |
운영체제 5주차 강의 (0) | 2021.04.04 |
운영체제 4주차 강의 (0) | 2021.04.03 |