728x90

# 프로세스

- 실행 중인 프로그램

- 메모리, 파일, 프로세스간 통신(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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기