운영체제 스터디 3주차 - 프로세스 관리

케이·2022년 2월 23일
0

운영체제 스터디

목록 보기
3/11

해당 게시글은 운영체제 스터디를 위해 반효경 교수님 운영체제 강의를 보고 기록한 게시물입니다. 틀린 정보가 있다면 언제든 지적해주세요🙏🏻

프로세스

프로그램의 실행 (메모리 로드)

  • 프로그램이 실행될때 그 프로그램만의 독자적인 주소공간이라는 것이 만들어지는데 그걸 버츄얼 메모리라고 한다.
  • 버츄얼 메모리는 실제로 존재하는 것이 아니고 머릿속에 존재.
  • 당장 필요한 부분은 물리적인 메모리에 올라가게 되고 메모리에 올라가 있지 않은 부분은 디스크의 swap area에 내려가게 된다.
  • 메모리 주소는 논리적인 주소가 있고 물리적인 주소가 있다.
  • 코드에는 실행파일에 있던 코드가 올라오는 부분, CPU에서 실행하는 기계어 코드가 올라온다.
  • 데이터는 데이터가 올라오는 부분으로 배열, 변수 등등이 올라오는데 정확하게는 모든 데이터가 올라오는 것이 아니고 전역변수나 프로그램 시작해서 종료할때까지의 데이터가 올라온다.
  • 함수 호출 리턴과 관련된 것은 스택에 쌓아놓는다.
  • 프로그램의 버추얼 메모리는 코드 데이터 스택으로 구성된다.
  • 운영체제 커널도 하나의 프로그램 이기 때문에 함수 구조로 되어 있다. 커널의 주소공간도 스택, 데이터, 코드로 구성되어 있다.

커널 주소 공간의 내용

함수

사용자 프로그램이 사용하는 함수

  • 사용자 정의 함수: 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수. 자신의 프로그램의 실행 파일에 포함되어 있다.
  • 커널 함수 : 운영체제 프로그램의 함수, 커널 함수의 호출 = 시스템 콜

프로그램의 실행

mode bit이 0이면 커널모드 모드빗이 1이면 유저모드.
커널모드와 유저모드가 번갈아가며 실행되다가 끝남.

프로세스

  • 프로세스는 간단히 말하면 실행중인 프로그램

프로세스의 context

  1. 씨피유에서 어디까지 수행했는가 - 하드웨어 문맥
  2. 프로세스의 주소공간 - 코드, 데이터, 스택
  3. 프로세스 관련 커널 자료 구조
    PCB, 커널 스택

프로세스의 상태

  • Running, ready, blocked 상태 이렇게 세 가지로 나눌 수 있음
  • Blocked: 뭔가 기다려야 하는 상태. 프로세스 자신이 요청한 이벤트(예 I/O)가 즉시 만족되지 않아 이를 기다리는 상태
  • 이 외에 new, terminated 상태가 있다.
  • 중기 스케줄러 개념이 나오면서 (아래부분 참고) Suspended (stopped) 상태도 발생. 중기 스케줄러에 의해서 쫓겨난.. 중기 스케줄러 에 의해서만은 아니고 외부적인 이유로 프로세스의 수행이 정지된 상태.
    프로세스는 통째로 디스크에 swap out 된다

프로세스의 상태도

  • 종료되면 프로세스가 아님. 생성중인 상태를 new. 온전하게 생성이 되면 ready상태.

PCB (Process Control Block)

  • 운영체제가 프로세스를 관리하기 위해 두는 자료구조
  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보로 다음의 구성 요소를 가진다
  1. OS가 관리상 사용하는 정보: 우선순위, 아이디 등등
  2. CPU 수행 관련 하드웨어 값
  3. 메모리 관련
  4. 파일 관련

문맥교환

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정.
  • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
  • 문맥 교환과 문맥교환이 아닌걸 잘 구분해야 함. 문맥 교환은 프로세스끼리 넘어가는 과정. 운영체제의 커널로 CPU가 넘어가는 건 문맥교환으로 보지 않는다.

프로세스를 스케줄링 하기 위한 큐

  • Job queue
  • Ready queue: CPU를 당장 얻어야 되는 아이들..
  • Device queue

스케줄러

  1. Long-term scheduler (Job scheduler)
  • 시작 프로세스 중에서 어떤 것을 레디 큐로 보낼지 결정

  • 프로세스에 메모리를 주는 문제 -> 메모리와 관련

  • 프로세스 생성중에 admitted 되어야 ready가 되는데 허락을 해주는게 장기 스케줄러

  • 스케줄러의 역할

    • 타임 쉐어링 이전에는 롱텀 스케줄러가 있었음.
      -Degree of multiprogramming을 제어: 메모리에 몇개 올라가는지, 메모리에 올라가 있는 프로그램의 수.
  1. Short-term scheduler (CPU scheduler)
  • 어떤 프로세스를 다음번에 러닝시킬지 결정
  • 프로세스에 CPU를 주는 문제
  • 충분히 빨라야함 (밀리 세컨드 단위)
  1. Medium-term scheduler (Swapper 라고도 부름)
  • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 프로세스에게서 메모리를 뺏는 문제
  • Degree of multiprogramming 을 제어
  • 중기 스케줄러가 생기면서 프로세스의 상태에 suspended가 추가됨.

프로세스 상태도

  • Suspended는 메모리를 통째로 빼앗긴거
  • Swap out 메모리에서 통째로 쫓겨난거

쓰레드

  • 프로세스 중에서 CPU 수행 단위를 Thread라고 함

  • 쓰레드를 사용하면 효율적임.

  • 쓰레드의 구성: 프로그램 카운터, 레지스터 셋, 스택 스페이스

  • 쓰레드가 쓰레드와 공유하는 부분- 코드, 데이터, OS 리소스

  • 장점: Thread가 하나가 있을때 I/O를 하게 되면 CPU를 뺏기게 됨. 다중 쓰레드로 구성된 task 구조에서는 하나의 서버 쓰레드가 blocked 상태인 동안에도 동일한 task 내의 다른 쓰레드가 실행되어 빠른 처리를 할 수 있음. 비동기식 입출력도 쓰레드 환경에서 잘 될 수 있음

  • 또 다른 장점: 응답성이 빠름. 자원을 공유하는 효과 - 효율성, 경제성.
    프로세스 하나만드는 것보다 쓰레드 하나 만드는게 효율적. 솔라리스의 경우 오버헤드가 각각 30배, 5배.. 차이남, 멀티프로세서 환경에서는 병렬성을 추구할 수 있다.

  • 쓰레드를 구현하는 방법

    • 운영체제가 쓰레드의 존재를 알게 만드는 Kernel threads
    • 운영체제가 쓰레드의 존재를 모르는 User threads.

프로세스 관리

프로세스 생성

  • 부모 프로세스가 자식 프로세스를 생성 - 프로세스를 만드는 행위는 운영체제가 하는데 이때 시스템 콜을 하면 fork 해줌.
  • 프로세스의 트리(계층 구조) 형성
  • 프로세스는 자원을 필요로 함: 운영체제로부터 받는다, 부모와 공유한다
  • 자원의 공유: 부모와 자식이 모든 자원을 공유하는 모델, 일부를 공유하거나 전혀 공유하지 않는 모델이 있음.
  • 독자적인 주소 공간이 생김
  • 자식의 주소공간은 부모의 공간을 그대로 복사함. 데이터와 스택도 복사.

프로세스 종료

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌. 자식 프로세스가 종료될때는 부모 프로세스에게 알리게 됨

  • 부모 프로세스가 자식의 수행을 종료시킴
    자식이 할당 자원의 한계치를 넘어서거나 자식에게 더 시킬일이 없을 경우. 부모가 먼저 종료하는 경우는 자식을 먼저 죽이고 그다음에 부모를 죽이게 됨.단계적 종료.

  • fork() 시스템 콜: 자식을 만들어 달라고 요청하는 함수

  • exec() 시스템 콜: Execlp 같은 인터페이스를 통해서 실행하게 됨.
    프로그램의 이름을

profile
삽질하며 깨닫고 배웁니다. (a.k.a 프로삽질러) + 이 구역의 회고왕

0개의 댓글