운영체제 - 프로세스 2

yjkim·2023년 9월 4일
0

운영체제

목록 보기
3/7

프로세스 1 에 이어서 작성

쓰레드

  • 프로세스보다 작은 개념. 프로세스 내에 존재하는 하나의 단일 실행 흐름.
  • 하나의 프로세스에는 여러개의 쓰레드가 존재할 수 있다

쓰레드에 대해서는 다음에 더 자세히 ㄱ

Process Scheduling

두 개의 프로세스 사이의 Switching은 전에서 다루었음. 그렇다면 다수의 프로세스 사이의 실행은?
-> Process Scheduling

  • 프로세스 스케쥴러가 실행 가능한 여러 프로세스들 중에서 다음에 무엇을 실행할지 선택함

  • 다양한 기준과 알고리즘을 따라서 이루어진다.

scheduling queues

프로세스는 다음 큐들 사이에서 왔다갔다함.

  • Job queue : 모든 프로세스들의 집합
  • Ready queue : 각 프로세서에 들어갈 준비가 된 프로세스들의 집합
  • Devices queue : I/O 장치를 기다리는 프로세스들
  • 프로세스는 다양한 큐들 사이에서 이동한다.

Ready Queue And Various I/O Device Queues (참고)

Representation of Process Scheduling

  • Queueing diagram (중요) --> 큐, 자원, 흐름 등을 나타냄

    Ready Queue에서 PCB가 하나씩 나와서 CPU로 들어가고,
    CPU에서는 프로세스를 종료시키던지 (exit, Terminated),
    I/O가 필요해서 I/O queue (Device Queue)로 PCB를 넣던지, (I/O 끝나면 다시 Ready Queue로 들어가겠죠?),
    CPU에서 할당한 시간이 끝나서 Preempted돼서 다시 Ready Queue로 들어가던지 한다.

Context Switch (문맥 교환)

  • cpu가 한 프로세스에서 다른 프로세스로 전환할때, 시스템은 문맥 교환을 통해서 이전 프로세스의 상태를 저장하고, 새로운 프로세스의 상태를 불러온다.
  • 프로세스의 상태는 pcb에 저장되어 있음.

    context switch 는 빨라야 한다!!
    왜? context switch time에는 아무런 쓸모 있는 작업을 할수 없다. 낭비되는 시간임(overhead)

  • OS와 PCB가 복잡할수록 context switch time은 더 길어짐
  • 하드웨어가 Context switch time을 줄이는 데 도움을 줄 수 있다.
    - 몇몇 하드웨어는 한 개의 CPU당 여러 레지스터를 제공함 --> 여러 문맥이 한번에 로드됨

Process Creation

부모 프로세스는 자식 프로세스를 생성할 수 있고, 이렇게 생성된 자식 프로세스들이 또 다른 자식 프로세스를 생성하여 프로세스 트리 구조를 형성한다.

  • 일반적으로 프로세스는 process identifier(pid)라는 것에 의해 정의되고 관리됨.
  • 프로세스의 자원 공유 옵션은 다음과 같이 세가지가 있음
    • 부모와 자식이 모든 자원을 공유함
    • 자식 프로세스가 부모 프로세스의 일부 자원을 공유함
    • 공유하지 않음
  • 실행 옵션은 다음과 같음
    • 동시 실행
    • 자식 프로세스가 종료될 때까지 부모 프로세스가 기다림
  • 주소 공간
    • 자식이 부모의 완전한 복제 프로그램이거나
    • 아니면 새로운 하나의 프로그램 이거나

UNIX 예시

  • fork() 시스템 콜은 새로운 프로세스를 생성함
  • fork() 시스템 콜 이후에 사용되는 exec() 시스템 콜은 프로세스의 메모리 공간을 새로운 프로그램으로 대체함

프로세스 생성 코드 예시 1) C (fork())

프로세스 생성 코드 예시 2) WindowAPI

Process Termination

  • 프로세스는 보통 exit() 시스템 콜을 호출해 프로세스를 종료한다
    • 부모 프로세스에게 상태값을 리턴함 (0이면 정상종료, 아니면 문제가 있는거임)
    • 운영체제에 의해 자원이 해제된다.
  • 다음과 같은 상황에서 부모프로세스는 () 시스템 콜을 호출하여 자식프로세스를 종료함.
    • 자식 프로세스가 자원을 너무 많이 사용함
    • 자식 프로세스가 더 이상 필요 없음
    • 부모 프로세스가 종료되었는데 자식 프로세스는 살아있는 경우를 허용하지 않는 운영체제 내에서 부모 프로세스가 종료되었을 경우
  • 부모 프로세스는 wait() 시스템 콜을 사용하여 자식 프로세스가 종료될 때 까지 기다릴 수 있음. wait() 콜을 통해 자식 프로세스의 상태 (정보나 pid 같은 것들)을 받아올 수 있다.
    • ex) pid=wait(&status)
  • zombie process : 종료되었지만 부모 프로세스가 wait()을 콜하지 않은 경우.(부모 프로세스가 종료되었거나,,,)
    • 자식 프로세스는 종료되었으나 wait() 콜을 하지 않아 부모프로세스에서는 자식프로세스의 정보를 반환받지 못한 경우
    • 계속 리턴값을 가지고 있음
    • 근데 init 프로세스가 주기적으로 wait()을 콜해서 자식 프로세스의 상태를 확인받아 좀비상태를 제거해줌
  • orphan process : 자식 프로세스의 종료를 확인하기 전에 부모프로세스가 종료된 경우.
    • 보통 이런 상황에선 운영체제가 고아 프로세스를 정리하고 리소스를 정리함

Interprocess Communication

프로세스간 통신 (IPC)

  • 시스템 내의 프로세스들은 독립적일 수도, 협력적일 수도 있다
  • 서로 cooperating 하는 프로세스들은 서로에게 영향을 끼침,ex) sharing data..

    IPC의 두가지 모델
  • 메세지 패싱
  • 공유 메모리 (shared memory)
    • 보통 프로세스에서 사용되는 메모리 영역은 해당 프로세스만 사용할 수 있지만 때때로 여러개의 프로세스가 같이 사용할 필요가 있음

다음에는 ipc와 thread에 대해서 더 자세히 ㄱ
아니 근데 벨로그 왜 자꾸 자동 비공개됨 아 이거 개화나네 이거 해결하느라 개힘들었네

profile
We may throw the dice, but the Lord determines how they fall

0개의 댓글