운영체제 #3 프로세스와 병행성 2

yeong·2022년 11월 6일
0

운영체제

목록 보기
3/3

유닉스 시스템에서 새로운 child process를 생성하는 일은 fork라는 시스템콜을 통해 이루어진다. 트리형태를 하고 있다.

  • 프로세스가 커널에게 뭔가를 요청할 때는 항상 시스템콜을 통해 이루어짐
  • A라는 프로세스가 실행되고 있고, fork라는 시스템콜 호출이 이루어졌다고 가정하자. 이를 통해 B라는 프로세스가 생성되는데, B는 원래 있던 A와 똑같은 모양새를 가진다.

Inter-process Communication (IPC)
: 서로 다른 프로세스 간에 정보를 주고 받는 일

  • 방법 1: Shared memory 사용
  • 방법 2: message passing 사용
  1. Shared memory
  • 커널에 shared memory 사용을 요청하는 시스템콜을 보낸다
  • 커널은 원래 메모리의 보호를 위해 각 프로세스가 다른 메모리 주소를 갖게끔 하는데, share memory 방식의 경우에는 양쪽 프로세스의 메모리 주소가 같게 한다
  1. message passing
  • 발신자는 정해진 방법에 의해 커널에게 메세지 전달 요청을 보내고, 커널은 수신자에게 해당 메세지를 전달한다
  • send-receive의 메커니즘이 필요함

효율성에서 보자면 shared memory가 편하지만, 메모리를 공유해야하므로 같은 컴퓨터 위에 있는 프로세스끼리만 정보를 주고받을 수 있다. 하지만 message passing 방식에서는 멀리 떨어진 컴퓨터와도 정보를 주고받을 수 있다.

shared memory에서 발생할 수 있는 동기화 문제는 어떻게 해결할까? > 다른 수업에서 알아볼 예정


쓰레드와 프로세스

쓰레드와 프로세스는 무엇이고, 차이점은 무엇인가?

쓰레드

  • 프로세스 내에서 연속적인 명령을 실행하고 있는 흐름
  • 동일 프로세스 내에 여러 개의 쓰레드 생성 가능
  • 쓰레드를 여러 개 만드는 것이 프로세스를 여러 개 만드는 것보다 오버헤드가 작음
  • = light weight process
  • 같은 프로그램 내의 서로 다른 부분을 실행하고 있다면, 각 쓰레드는 프로그램 카운터(PC), 현재 가지고 있는 레지스터의 값, 스택을 가지고 있어야 한다
  • 한 프로그램 내의 서로 다른 쓰레드는 메모리의 address spaces는 공유하지만, 스택은 각각 가지고 있다
  • 스택에는 로컬 변수, function의 리턴 주소, 함수의 파라미터 등이 담겨있기 때문에 서로 다른 쓰레드 간에 이것들을 공유하지 않게 된다
  • 하지만 address space는 공유하기 때문에 전역 변수는 공유한다. 쓰레드 A가 전역변수 V를 변화시키면, 쓰레드 B가 바라보는 V도 값이 변경된 상태

프로세스

  • 하나의 프로그램이 실행되면 하나의 프로세스가 생긴다
  • 여러 개의 프로세스가 병렬적으로 실행되는 것처럼 보이는 이유는 CPU가 time share 되기 때문이다
profile
Yes I am

0개의 댓글