Skip to content

Latest commit

 

History

History
367 lines (215 loc) · 14.4 KB

5장__프로세스 관리_2.md

File metadata and controls

367 lines (215 loc) · 14.4 KB

5장 프로세스 관리_2


5-5 🍂 프로세스를 스케줄링하기 위한 큐 daelee

  1. 운영체제는 작업 큐(job queue)를 두고 작업 큐의 제일 앞에 줄 서 있는 프로세스에 제일 먼저 CPU를 할당한다. (O/X)

  2. 프로세스가 CPU를 할당받고 코드를 수행하다가 입출력 요청이 발생하면 어떤 큐에 가서 줄을 설까요? 그리고 이 큐에 속한 프로세스들은 어떤 상태(실행, 준비, 봉쇄) 일까요?

  3. 공유데이터에 대한 접근 권한을 큐로 관리하는 이유는?

  4. 이처럼 프로세스의 상태 관리를 위한 다양한 큐들은, 커널의 주소 영역 중 어디에 위치하고 있을까요? (스택 vs 데이터 vs 코드)

📄 답지
  1. 운영체제는 작업 큐(job queue)를 두고 작업 큐의 제일 앞에 줄 서 있는 프로세스에 제일 먼저 CPU를 할당한다. (O/X)

    정답 : X

    운영체제는 **준비 큐(ready queue)**를 두고 준비 큐의 제일 앞에 줄 서 있는 프로세스에 제일 먼저 CPU를 할당한다.

    작업 큐는 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 큐가 작업 큐에 속하게 된다.

  2. 프로세스가 CPU를 할당받고 코드를 수행하다가 입출력 요청이 발생하면 어떤 큐에 가서 줄을 설까요? 그리고 이 큐에 속한 프로세스들은 어떤 상태(실행, 준비, 봉쇄) 일까요?

    정답 : 장치 큐, 봉쇄 상태

    운영체제는 자원별로 장치 큐(device queue)를 둔다.

    1. 예를 들어 키보드 입출력 요청이 발생했다면 프로세스는 키보드 입출력 장치 큐에 가서 줄을 서게 된다.
    2. 장치 큐에 속한 프로세스는 봉쇄 상태에 있다가 원하는 데이터를 로컬버퍼로 받아들인 후
    3. 키보드 컨트롤러가 인터럽트를 발생시키면 준비 상태로 바뀌어 준비 큐로 이동한다.

    image

  3. 공유데이터에 대한 접근 권한을 큐로 관리하는 이유는?

    정답 :

    어떤 프로세스가 공유 데이터를 사용하는 중에 다른 프로세스가 같은 데이터를 접근하면 데이터에 대한 일관성이 훼손될 수 있어서. 공유 데이터같은 소프트웨어 자원또한 매 시점 하나의 프로세스 만이 접근할 수 있도록 큐로 관리한다.

  4. 이처럼 프로세스의 상태 관리를 위한 다양한 큐들은, 커널의 주소 영역 중 어디에 위치하고 있을까요? (스택 vs 데이터 vs 코드)

    프로그램이 사용하는 데이터를 저장하는 데이터 영역에 둔다.



5-6 🍂 스케줄러  secho

1번

스케줄러의 종류 3가지를 작성해주시고 스케줄러란 무엇인지 설명해주세요!


2번 바둑, 장기, 장첸, 단기, 단거, 중기, 송중기, 스왑 인, 스왑 무브, 문맥교환, 스왑아웃

__ 스케줄러는 어떤 프로세스를 준비 큐에 진입시킬지를 결정한다.

__ 스케줄러는 준비 상태의 프로세스 중에서 어떤 프로세스를 실행상태로 만들 것인지. 즉, 어떤 프로세스에세 CPU를 할당할 것인지를 결정하며 매우 빈번한 속도(ms)로 호출된다.

__ 스케줄러는 0순위로 __상태에 있는 프로세스들 디스크로 __ __시켜서 부족해진 메모리공간을 확보할 수 있다.

📄 답지

1번

스케줄러의 종류 3가지를 작성해주시고 스케줄러란 무엇인지 설명해주세요!

  • 장기, 단기, 중기스케줄러가 있음
  • 스케줄러 : 어떤 ps에게 자원을 할당할지를 결정하는 os 커널의 코드
    • 추가 : 준비 큐에 존재하는 프로세스들을 특정한 우선순위 기반으로 CPU를 할당받게 해주는 역할

2번

바둑, 장기, 장첸, 단기, 단거, 중기, 거중기, 스왑 인, 스왑 무브, 문맥교환, 스왑아웃

장기 스케줄러는 어떤 프로세스를 준비 큐에 진입시킬지를 결정한다.

단기 스케줄러는 준비 상태의 프로세스 중에서 어떤 프로세스를 실행상태로 만들 것인지. 즉, 어떤 프로세스에세 CPU를 할당할 것인지를 결정하며 매우 빈번한 속도(ms)로 호출된다.

중기 스케줄러는 0순위로 봉쇄상태에 있는 프로세스들 디스크로 스왑 아웃시켜서 부족해진 메모리공간을 확보할 수 있다.

suspended ready : 준비 상태에 있던 프로세스가 디스크로 스왑아웃

suspended blocked : 봉쇄 상태에 있던 프로세스가 디스크로 스왑아웃

new : 프로세스 생성중

프로세스를 생성하고 있는 단계로 커널 공간에 PCB가 만들어진 상태

ready : 프로세스가 CPU를 기다리는 상태

프로세스가 메모리에 적재된 상태로 실행하는데 필요한 자원을 모두 얻은 상태

아직 CPU를 받지는 않았지만 CPU를 할당 받으면 바로 실행 가능한 상태

ready상태를 가지는 여러개의 프로세스들이 존재할 수 있음

running : 프로세스가 CPU를 할당받아 명령어를 수행중인 상태

일반적으로 CPU가 하나이기 때문에, 여러 프로세스가 동시에 실행되도 실제로 실행중인 프로세스는 매 시점 하나 뿐임

blocked : 프로세스가 CPU를 할당 받아도 당장 실행할 수 없는 상태

현재 프로세스가 I/O작업 등을 을 처리중 상태를 의미

terminated : 프로세스의 실행 종료

프로세스의 실행이 완료되고 할당된 CPU를 반납, 커널공간내의 PCB는 남아 있음

suspended : 프로세스의 중지 상태

suspended 상태의 프로세스는 메모리를 강제로 뺏긴 상태로 특정한 이유로 프로세스의 수행이 정지된 상태를 의미하며, 외부에서 다시 재개시키지 않는 이상 다시 활성화 될 수 없음중기 스케줄러에 의해 디스크로 스왑 아웃된 프로세스의 상태가 대표적인

suspenden상태라 할 수 있음. suspended ready와 suspended blocked가 있음

출처



5-7 🍂 프로세스의 생성  jehong

  1. 다른 프로세스를 생성한 프로세스를 ___a___ 프로세스라 부르고 생성된 프로세스는 ___b___ 프로세스라 한다. ___a___ 프로세스가 종료될 경우 그 프로세스의 모든 후손들을 연쇄적으로 종료시킨 후 종료되는데 이 때, 프로세스의 종료는 두 가지가 있다. ___c___ 종료는 프로세스가 명령을 모두 수행 후 코드 마지막에 exit() 시스템 콜을 추가해 운영체제에 자신이 종료됨을 알리는 방식이다. 반대로 ___d___ 종료는 ___a___ 프로세스가 abort() 함수를 통해 ___b___ 프로세스의 수행을 강제로 종료하는 것이다. fork()와 exec()등의 프로세스 관련 함수들은 프로세스가 직접 수행할 수 없는 ___e___ 명령이라 시스템 콜을 통해서만 그 수행이 가능하다.


  2. kukimyeha와 야식으로 먹을 치즈볼을 사러 bhc 매장에 방문했습니다. yeha는 정확히 아래 프로그램의 출력값 개수만큼의 치즈볼을 사오라고 했습니다.😧 kukim이 사야 할 치즈볼의 개수를 골라주세요.

    #include <stdio.h>
    #include unistd.h>
    
    int main() {
    	if (fork() == 0)
    		printf("4");
    	else
    		printf("2");
      return 0;
    }

    a. 2개

    b. 4개

    c. 6개

    d. 24개

    e. 42개


  3. 다음은 secho 프로그램의 코드입니다. secho 프로그램은 실행될 때마다 "모에요"를 출력합니다. secho 프로그램을 실행시키면 몇 번의 "모에요"가 출력될까요? 🤯

    #include <stdio.h>
    #include <unistd.h>
    
    int main() {
    	fork();
    	fork();
    	fork();
    	printf("모에요\n");
      return 0;
    }
📄 답지
  1. 다른 프로세스를 생성한 프로세스를 부모 프로세스라 부르고 생성된 프로세스는 자식 프로세스라 한다. 부모 프로세스가 종료될 경우 그 프로세스의 모든 후손들을 연쇄적으로 종료시킨 후 종료되는데 이 때, 프로세스의 종료는 두 가지가 있다. 자발적 종료는 프로세스가 명령을 모두 수행 후 코드 마지막에 exit() 시스템 콜을 추가해 운영체제에 자신이 종료됨을 알리는 방식이다. 반대로 비자발적 종료는 부모 프로세스가 abort() 함수를 통해 자식 프로세스의 수행을 강제로 종료하는 것이다. fork()와 exec()등의 프로세스 관련 함수들은 프로세스가 직접 수행할 수 없는 특권 명령이라 시스템 콜을 통해서만 그 수행이 가능하다.

    a: 부모

    b: 자식

    c: 자발적

    d: 비자발적

    e: 특권


  2. kukimyeha와 야식으로 먹을 치즈볼을 사러 bhc 매장에 방문했습니다. yeha는 정확히 아래 프로그램의 출력값 개수만큼의 치즈볼을 사오라고 했습니다.😧 kukim이 사야 할 치즈볼의 개수를 골라주세요.

    #include <stdio.h>
    #include unistd.h>
    
    int main() {
    	if (fork() == 0)
    		printf("4");
    	else
    		printf("2");
      return 0;
    }

d. 24개
부모는 fork()의 결괏값이 양수, 자식(복제본)은 결괏값이 0이 할당됩니다
처음 실행시 부모는 fork()가 양수이므로 else로 가서 2를 출력합니다.
fork()함수가 실행되면 해당라인까지 실행한 기억을 가진 복제본이 하나 생성됩니다.
이 때 생성된 복제본은 fork()값이 0이므로 4를 출력합니다.
따라서 24가 출력됩니다.

공룡책 3장 참고


  1. 다음은 secho 프로그램의 코드입니다. secho 프로그램은 실행될 때마다 "모에요"를 출력합니다. secho 프로그램을 실행시키면 몇 번의 "모에요"가 출력될까요? 🤯

    #include <stdio.h>
    #include <unistd.h>
    
    int main() {
    	fork();
    	fork();
    	fork();
    	printf("모에요\n");
      return 0;
    }

8
fork()개수가 n개라고 한다면 2^n개만큼의 "모에요"가 출력됩니다.
fork()가 실행될 때마다 프로세스 개수가 2배가 됩니다.
처음 시작은 프로세스 1개
첫 줄이 실행되면 프로세스는 2개
두 번째 줄이 실행되면 프로세스는 4개
세 번째 줄이 실행되면 프로세스는 8개입니다.


공룡책 3장 참고



5-8 🍂 프로세스 간의 협력  taelee

  1. 원칙적으로 부모 프로세스와 자식 프로세스는 독립적인 주소 공간을 갖는다.(O/X)

  2. 경우에 따라서는 프로세스간의 처리 결과나 정보를 공유해서 처리속도를 향상 시킬 수 있다.(O/X)

  3. 프로세스간의 데이터 공유시 무분별한 수정은 데이터의 불일치를 가져올 수 있다. 이때 운영체제에서 공유 데이터의 동기화를 유지하기 위해서 제공하는 대표적인 매커니즘은 무엇인가?

  4. 데이터를 공유하는 방법 2가지는 무엇인가?(정답 2개)

    a. 포트 공유

    b. 데이터 전달

    c. 메모리 동기화

    d. 메시지 전달

    e. 공유 주소

    f. 공유 메모리

  5. 위 2가지 방식 중 ____ 전달은 __ 통신과 ___통신으로 나뉜다.

  6. ___통신은 하나의 링크는 한쌍의 프로세스와 대응된다.

  7. ___통신은 하나의 링크를 여러쌍의 프로세스가 사용할 수 있고 프로세스가 여러개의 링크를 사용할 수 있다.

  8. 다음은 IPC 중 공유메모리 방식에 대한 설명이다.

    미혜 프로세스는 책 '운영체제와 정보기술의 원리'의 특정 내용을 메모리로 가져와 저장해두었다. 미혜 프로세스와 공유하는 메모리를 갖고 있는 예하 프로세스는 똑같은 책의 다른 부분을 메모리로 가져와 저장하는데 그만 모르고 미혜 프로세스 부분을 지워버렸다.😳 그로인해 데이터의 불일치가 일어났다. 이는 ____이/가 이 공유 메모리 접근에 대해 책임지지 않기 때문이다.

📄 답지
  1. 원칙적으로 부모 프로세스와 자식 프로세스는 독립적인 주소 공간을 갖는다.(O/X)

  2. 경우에 따라서는 프로세스간의 처리 결과나 정보를 공유해서 처리속도를 향상 시킬 수 있다.(O/X)

  3. 프로세스간의 데이터 공유시 무분별한 수정은 데이터의 불일치를 가져올 수 있다. 이때 운영체제에서 공유 데이터의 동기화를 유지하기 위해서 제공하는 대표적인 매커니즘은 무엇인가? IPC(Inter-Process Communication)

  4. 데이터를 공유하는 방법 2가지는 무엇인가?(정답 2개)

    a. 포트 공유

    b. 데이터 전달

    c. 메모리 동기화

    d. 메시지 전달

    e. 공유 주소

    f. 공유 메모리

  5. 위 2가지 방식 중 ____ 전달은 __ 통신과 ___통신으로 나뉜다.

    메시지, 직접, 간접

  6. ___통신은 하나의 링크는 한쌍의 프로세스와 대응된다.

    직접

  7. ___통신은 하나의 링크를 여러쌍의 프로세스가 사용할 수 있고 프로세스가 여러개의 링크를 사용할 수 있다.

    간접

  8. 다음은 IPC 중 공유메모리 방식에 대한 설명이다.

    미혜 프로세스는 책 '운영체제와 정보기술의 원리'의 특정 내용을 메모리로 가져와 저장해 두었다. 미혜 프로세스와 공유하는 메모리를 갖고 있는 예하 프로세스는 똑같은 책의 다른 부분을 메모리로 가져와 저장하는데 그만 모르고 미혜 프로세스 부분을 지워버렸다.😳 그로인해 데이터의 불일치가 일어났다. 이는 ____이/가 이 공유 메모리 접근에 대해 책임지지 않기 때문이다.

    커널