ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS 스터디] OS - Process
    CS📟 2022. 10. 22. 21:49

    프로세스

    프로세스의 실행

    어드레스 스페이스에는 코드 데이터 스택이 있다

    • 주소 공간
      • 코드 영역
        • 프로그램의 기계어들
      • 데이터 영역
        • 전역 변수 같은 데이터
      • 스택
        • 함수들을 저장
        • 크기에 제한이 있다.
        • 스택보다 크다
        • 필요할 때마다 사용
        • 포인터로 사용해야 하기 때문에 느림

     

    커널 주소 공간의 내용
    • 코드 영역
      • 시스템 코드, 인터럽트 처리 코드와 자원 관리를 위한 코드가 존재
    • 데이터
      • PCB(Process Control Block)
        • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
        • 다음의 구성 요소를 가진다(구조체로 유지)
        • OS가 관리상 사용하는 정보
          • Process state, Process ID
          • scheduling infomationm priority
        • CPU 수행 관련 하드웨어 값
          • Program counter, register
            • register를 저장해놔야 이용권이 돌아왔을 때 하던 작업을 다시 진행할 수 있음
        • 메모리 관련
          • Code, data, stack의 위치 정보
        • 파일 관련
          • Open file, descriptions
    • 스택
      • 각 프로세스마다 별도로 관리

     

    함수
    • 사용자 정의 함수
      • 자신의 프로그램에서 정의한 함수
    • 라이브러리 함수
      • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 커널 함수
      • 운영체제 프로그램의 함수
      • 예 : 시스템 콜

     

    프로그램의 흐름

    프로그램의 주소 공간에서 유저 모드로 사용되다가 시스템 콜 등이 일어나면 운영체제한테 제어권을 넘기고

    커널 모드로 돌입하는 과정을 반복

     

    프로세스의 개념
    • 프로세스의 문맥
      • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter
      • 각종 register
    • 프로세스의 주소 공간
      • 코드, 데이터, 스택
      • 현재 상태를 알 수 있다(진행 중인 함수 등)
    • 프로세스 관련 커널 자료구조
      • PCB
        • CPU 사용량, 메모리 사용량 등을 저장
      • Kenel Stack
        • 프로세스마다 다른 스택을 사용하기 때문에 현재 상태를 알 수 있음

     

    프로세스 상태
    • CPU 사용 중 - Running
    • Queue에서 대기 중 - Ready
    • CPU를 줘도 사용할 수 없는 상태 - Blcoked
      • 예 : I/O 작업, 디스크에서 읽어 오는 중, 공유 데이터 대기 중
    • 외부요인으로 정지 - Suspended
    • 생성중
    • 종료 중

     

    • 공유 데이터 
      • 여러 프로세스가 데이터를 사용하는 데이터

     

    프로세스 상태도

     

     

    문맥 교환(Context Switch)

    • CPU가 다른 프로세스로 넘어가는 것
      • 시스템 콜이나 인터럽트가 일어난 다고 모두 문맥 교환은 아님
      • 하나의 프로세스에서 다른 프로세스로 CPU가 넘어가야 문맥 교환임
    • 문맥 교환 시에는 오버헤드가 큼 (예 : cache memory flush)

     

    스케줄링을 위한 큐
    • Job Queue
      • 현재 시스템 내에 있는 모든 프로세스의 집합
    • Ready Queue
      • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
    • Device Queue
      • I/O device의 처리를 기다리는 프로세스의 집합
      • 프로세스들은 각 큐들을 오가며 수행됨

     

    스케줄러
    • Long-term scheduler(장기 스케줄러 or job scheduler)
      • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
      • 프로세스에 메모리를 주는 문제
      • new - admintted - ready로 올 때 admintted를 해줌
      • 보통은 없음
    • short-term scheduler(단기 스케줄러 or CPU scheduler)
      • 어떤 프로세스를 다음에 running 할지 결정
      • 프로세스에 CPU를 주는 문제
      • 빠름
    • Medium-term scheduler
      • 메모리를 뺏는 문제
      • 성능이 저하되면 프로세스를 골라서 메모리에서 쫓아냄
      • 프로세스 상태가 Suspended로 바뀜

     

     

    프로세스 상태도

    프로세스의 상태는 운영체제가 프로세스를 관리하기 위한 상태이므로 운영체제는 상태가 없음

     

    Thread
    • 동일한 프로세스 안에서 스레드를 만들어서 사용하면 Context Switch를 하지 않아도 되니 오버헤드가 줄어든다.
    • 하나의 스레드가 running 상태일 때 다른 스레드가 일을 처리하게 하면 조금 더 빠른 처리 가능
    • 구성
      • program counter
      • register set
      • stack space
    • 같은 프로세스 안에 스레드끼리 공유
      • code section
      • data section
      • OS resource
    • 장점
      • 응답성이 빠름
      • 자원을 공유
      • Soaris의 경우 스레드를 쓰면 만드는 것은 30배, 스위칭하는 것은 5배가 빠름
      • 병렬성을 추구 가능
      • 병렬로 처리하면 속도가 빠름
    • 구현
      • 커널이 스레드를 알게 구현
      • 운영체제가 스레드를 모름
        • I/O가 일어나면 프로세스 내부에서 비동기식으로 CPU를 받아서 일을 처리

     

    프로세스 관리
    • 프로세스 생성
      • 부모 프로세스가 자식 프로세스를 생성(복제 생성)
      • 프로세스의 트리 형성
      • 프로세스는 자원을 필요로 함
      • 운영체제로부터 받음
      •  부모와 공유
        • 자원의 공유
          • 부모와 자식이 모든 자원을 공유
          • 일부만 공유
          • 전형 공유하지 않음
    • 수행
      • 부모와 자식은 공존하며 수행
    • 주소 공간
      • 부모의 공간을 복사
      • 자식은 그 공간에 새로운 프로그램을 올림
    • 유닉스의 예
      • fork()
        • 시스템 콜이 새로운 프로세스를 생성
        • pid가 0이면 자식 pid가 0보다 크면 부모
      • exec()
        • 덮어쓰기
      • wait()
        • blocked 상태로 전환
        • 자식이 종료될 때 부모가 기다려야 하면 wait()을 사용
      • exit()
        • 프로세스를 종료
          • 자발적 종료
          • 비자발적 종료
        • 자식이 부모에게 output data를 보냄
        • 자원들을 운영체제에게 반납
      • abort
        • 부모가 강제로 종료
          • 자식이 할당 자원을 넘어섬
          • 더 이상 태스크가 필요치 않음
          • 부모가 종료됨
            • 아래의 자식들은 다 종료시킴
    프로세스 간 협력
    • 프로세스는 기본적으로 독립적
      • 독립적 프로세스
        • 프로세스는 각자의 주소 공간을 가비고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
    • 경우에 따라서 협력을 해야하는 경우도 존재
      • 협력 프로세스
      • 프로세스 협력 메커니즘으로 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
        • 프로세스 간 협력 매커니즘(IPC: Interprocess Communication)
          • 메시지를 전달하는 방법
            • message passing
              • 커널을 통해 메시지 전달
              • 운영체제를 매개로 메세지 전달
                • Direct Communication
                  • 통신하려는 프로세스의 이름을 명시적으로 표시(네가 받아라~)
                • Indirect Communication
                  • mailbox or port를 통해서 메시지 간접 전달(어디로 가는지는 모르겠지만 필요한 사람 받아라~)
        • 주소 공간 공유
        • shared memory
          • 서로 다른 프로세스 간에도 일부 주소 공간을 공유
          • 원칙적으로는 자신의 코드 공간만 써서 알 수 없지만 공유할 메모리 공간을 정해서 공유하게 된다.
          • 서로 신뢰가 가능한 프로세스일때 사용하는 게 좋다.
        • thread
          • 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵다.
          • 스레드 간에 주소 공간을 공유해서 협력가능
          • 협력이 조금 더 수월

    'CS📟' 카테고리의 다른 글

    CS 스터디 - 운영체제 : 병행제어 I  (0) 2022.11.04
    [CS] 운영체제 - CPU 스케줄링  (0) 2022.11.03
    CS 스터디 - 컴퓨터 시스템의 구조  (0) 2022.10.14
    [CS 스터디] 운영체제 개요  (1) 2022.10.07
    [TCP/IP] CH 6 보안  (2) 2022.09.17
Designed by Tistory.