개발공부/OS

[Chapter-3] 프로세스 관리

tae_98 2024. 7. 21. 02:27

-이대 반효경 교수님 강의 기반으로 작성되었습니다-

 

프로세스의 생성

부모 ==> 자식

(트리구조)

 

프로세스는 자원이 필요

    1. 운영체제로 부터 얻어오기

    2. 부모에게 얻어오기 (종류 : 전체, 일부, 아예 공유 x)

        ==> 내용이 같은데 공유를 하지 않는다면 낭비다

++Copy on write ==> (cow)

    write가 발생 했을때 그때 카피뜨겠다.

 

관련된 시스템 콜

- fork()

부모프로그램 복사

pc도 따라가기 때문에 무한 복제는 방지됩니다.

Q. 부모와 자식 분간은 어떻게?

A. pid로 (부모>0, 자식 = 0)

 

- exec()

새로운 프로그램 올리기

== execlp(실행파일, 명령어, 파라미터...,NULL) 

    경로는 환경변수 PATH에 정의된 경로에서 찾는다네요

    ex) execlp(ls,ls,-al,NULL) 은 터미널에서 'ls -al' 명령 실행과 같다

 

- wait()

해당 프로세스를 block상태로 재워버리기
보통 자식 ps를 만들고 wait()
자식 ps가 끝난 후 ready상태로 변환

 

- exit()
프로그램 종료콜
1. 자발적 종료
    컴파일러가 프로그램 끝날때 자동으로 호출
    명시적으로도 가능

2. 비자발적 종료

    키보드로 kill, break 입력
    부모프로세스가 자식프로세스 강제종료
    부모가 종료

 

프로세스 간 협력

독립적 프로세스(independent)

=  하나의 프로세스는 다른 프로세스의 수행에 영향 x

 

협력 프로세스

= 다른 프로세스의 수행에 영향을 미칠 수 있음

   프로세스 간 협력 메커니즘(ipc) = message passing : 커널을 통해 메시지 전달, shared memory 

 

message passing?

direct communication : 통신하려는 프로세스 이름 명시

indirect communication : mailbox 혹은 포트를 통해 메시지 전달

 

shared memory?

커널이 한번 주면 프로세스 끼리 관리