운영체제 정리-3

beenyyy·2023년 5월 2일
post-thumbnail

<프로세스에 대한 작업>-프로세스 새로 직접 생성

① Build from scratch (windows)
1) Load code and data into memory
2) Create empty stack
3) Create PCB
4) Put process on ready queue
② Clone on existing one(Linux) + execute new one

<프로세스 계층 구조>-프로세스가 다른 프로세스 생성

• 부모 프로세스가 자식 프로세스 생성 -> 프로세스 트리 형성
• 프로세스 식별(pid)
• 리소스 공유 옵션

  • 부모와 자식이 모든 자원을 공유 (리눅스)
  • 자식은 부모 리소스의 하위 집합을 공유
  • 부모와 자식이 자원을 공유하지 않음 (윈도우)

•실행 옵션 (리눅스, 윈도우 둘 다 지원)

  • 부모와 자식이 동시에 실행 concurrently
  • 부모는 자식이 종료될 때까지 기다림 wait

• 주소 공간 – 저장된 메모리 위치는 다름
-부모의 자식 복제
-자식은 프로그램을 메모리에 로드 (옷 바꿔입기)

<프로세스 생성 기법>

•유닉스(리눅스) 예제
-fork(): 자식 프로세스가 생성/ 부모, 자식 동시 수행
-exec(): 새로운 프로그램으로 메모리 공간 재배치 및 수행

fork()의 결과 반환값이 0이면 자식 프로세스, 반환값이 자식의 PID이면 부모 프로세스(양수값)

<프로세스 생성 과정>- 기존의 것을 복사하는 방법

  1. fork()하기 직전 프로세스 상태를 저장
  2. PCB의 모든 메모리 영역 복제 (PID 빼고)
  3. 새 프로그램을 로드하고 메모리 초기화(덮어씀)
  4. 새로운 프로세스를 ready queue에 대기

<프로세스 종료>

• exit() 프로세스가 OS에게 종료 요청.
-child의 상태 데이터 반환 (wait())
-child의 실행을 종료(abort()) - 부모 자신이 통제
• return(0) -> exit(0)
• 일부 OS는 부모가 종료된 경우 자식의 존재를 허용하지 않음 (abort())
-계단식 종료(Cascading termination):모든하위 종료
• 종료는 OS에 의해 시작된다.
• pid=wait(&status); 자식의 상태 데이터, pid 반환
• 대기 중인 부모가 없는 경우 (자식이 먼저 끝난 경우)
-자식은 좀비 상태
• 부모가 wait()를 호출하지 않고 종료된 경우
– 프로세스는 고아(orphan) 상태. &좀비
-고아들은 최상위 부모 프로세스인 init/systemd가 주기적으로 관리

<Multiprogram 아키텍처 예시(Chrome)>

3가지 유형의 프로세스
• Browser 프로세스
• Renderer 프로세스
• Plug-in 프로세스
-> 프로세스 간 소통이 중요하다

<프로세스 간 통신> = IPC

• 시스템 내의 프로세스는 독립적이거나 협력적
• 협력 프로세스는 데이터 공유를 포함해 다른 프로세스에 영향을 미치거나 영향을 받을 수 있음
• 협력 프로세스의 이유(소통의 필요성):

  • 정보 공유, 계산속도 향상, 모듈성, 편의

• 협력 프로세스는 IPC(inter-process 커뮤니케이션)이 반드시 필요함
• 2개의 대표적인 IPC <커뮤니케이션 모델>

  1. Message passing 모델(메시지 전달)
  • 메시지 규격이 처음에 정해짐
  • 충돌 고려 안 해도 됨 / 커널을 거쳐서 속도가 느림
  1. Shared memory 모델(공유 메모리)
  • 두 개 이상의 프로세스가 공유하는 공간 만듦(공유 공간의 주소가 하나 주어짐) / 다수의 메시지 전송 가능
  • 동시에 쓰는 경우 생길 수 있어 충돌을 고려해야 함
  • 커널 관여 없이 메모리 직접 사용-> IPC 속도 빠름
profile
📚beenyyy의 개발공부

0개의 댓글