운영체제 예상질문 10선

이상훈·2023년 10월 3일
0

CS

목록 보기
8/27

1. Kernel vs Shell

Kernel(커널): 운영 체제의 핵심 부분으로, 하드웨어와 프로세스 간의 상호 작용을 관리한다. 커널은 하드웨어 자원에 접근하고 제어하며, 시스템 리소스 관리와 프로세스 스케줄링과 같은 핵심 작업을 수행한다. 또한 파일 시스템, 메모리 관리, 디바이스 드라이버 등과 같은 기능도 제공한다. 사용자로부터 직접 명령 받거나 해석하지 않는다.

Shell(셸): 명령어 해석기(Command Interpreter)라고도 불리며, 사용자와 운영 체제 간의 인터페이스 역할을 한다. 셸은 사용자가 입력한 명령을 해석하고 해당 명령을 커널이 이해할 수 있는 형식으로 전달한다. 또한 명령의 실행 결과를 사용자에게 표시한다. 다양한 셸 프로그램이 존재하며, 각각은 다른 명령 및 기능을 지원한다.


2. 컴퓨터 부팅 과정을 설명해주세요.

Ram : 휘발성 메모리이며 memory 대부분을 차지하며 실제 프로그램이 할당되는 곳이다. (수 MB ~ 수 GB)
Rom : 비휘발성 메모리이며 극히 일부를 차지한다. (수 KB)

여기서 휘발성 메모리란 전원이 꺼지면 정보가 삭제되며 비휘발성 메모리란 전원이 꺼져도 정보가 유지된다. 부팅 과정은 아래와 같다.

  1. 컴퓨터의 전원이 켜진다.
  2. CPU에서 Rom의 초기화 코드를 읽는다.
  3. Rom 안에 있는 POST(Power on self test)가 실행된다. Post는 현재 하드웨어의 상태를 검사하고 오류 여부를 확인한다.
  4. Rom 안에 있는 부트 로더가 실행된다. 부트로더는 하드디스크에 저장된 운영체제를 찾아서 Ram으로 로드한다.
  5. 운영체제가 Ram에서 실행된다.

3. 이중모드에 대해 설명해주세요.

일반 사용자가 고의 또는 실수로 STOP, HALT, RESET과 같은 명령어를 실행해서 컴퓨터의 동작이 멈추거나 꺼지면 치명적이다. 혹은 I/O 디바이스를 마음대로 조작하는 것도 마찬가지다. 따라서 이를 방지하기 위해 이중 모드라는 개념이 탄생했다.

이중모드란 말 그대로 모드를 유저 모드(User mode)와 관리자 모드(Supervisor mode)로 나누어 운영체제와 시스템 자원을 보호하는 기법이다. CPU 내부의 레지스터의 modebit를 활용하여 유저 모드와 관리자 모드를 구분한다. 유저 모드는 비트 값을 1, 관리자 모드에서는 비트 값을 0으로 설정한다. 시스템 콜을 통해 유저 모드에서 관리자 모드로 전환된다.

유저 모드

  • 사용자 애플리케이션 코드 실행
  • 시스템에 제한된 접근만 허용, 하드웨어 직접 접근 불가

관리자 모드

  • 관리자 모드에서 OS는 모든 하드웨어 접근 및 제어 가능
  • 시스템의 모든 메모리에 접근 및 모든 CPU 명령 실행 가능

4. 프로세스 vs 스레드

프로세스는 컴퓨터의 메모리에 올라와 실행되고 있는 프로그램을 말하며 스레드는 프로세스 내 작업의 흐름을 지칭한다.
하나의 프로세스는 하나 혹은 여러 개의 스레드로 이루어질 수 있다.

메모리 영역

  • 프로세스 : 각 프로세스는 독립적인 메모리 공간을 가진다. 여기서 메모리 공간이란 code, data, stack, heap을 의미한다.
  • 스레드 : 프로세스 내의 stack을 제외한 다른 메모리 영역을 프로세스 내의 다른 스레드들과 공유하기 때문에 메모리적 이점이 있다.

IPC

  • 프로세스 : 프로세스 간 통신에서 IPC가 필요하다.
  • 스레드 : 스레드 간 통신에서 IPC가 불필요하다.

안정성

  • 프로세스 : 각 프로세스는 독립적으로 실행되므로 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않아서 안정성이 높다.
  • 스레드 : 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어져 있는 프로세스에 영향을 끼칠 수 있다.

시간

  • 프로세스 : 생성과 종료에 많은 시간이 든다.
  • 스레드 : 생성과 종료에 더 적은 시간이 든다.

동기화

  • 프로세스 : 각 프로세스는 독립적이므로 동기화 작업이 필요하지 않다.
  • 스레드 : 공유 자원 관리 및 동기화 작업이 필요하다.

5. 멀티프로세싱 vs 멀티스레딩

멀티프로세싱 : 여러 개의 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것을 말한다. 특정 프로세스 중 일부에 문제가 발생하더라도 다른 프로세스에 영향을 미치지 않으며 격리성과 신뢰성이 높다는 장점이 있다.

멀티스레딩 : 프로세스 내 작업을 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하고 프로세스보다 가볍기 때문에 효율성이 높은 장점이 있다. 하지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어져 있는 프로세스에 영향을 줄 수 있다는 단점이 있다.

대표적인 멀티프로세싱, 멀티스레딩의 예는 Internet Explorer와 Chrome 브라우저이다.

Internet Explorer는 하나의 프로세스 내에서 모든 탭이 각각의 스레드로 구성된다. 이는 모든 탭이 하나의 프로세스 공간에서 실행되고 서로 간섭을 받을 수 있으며, 하나의 탭의 문제가 전체 프로세스에 영향을 줄 수 있다는 의미이다.

반면에 Chrome 브라우저는 탭마다 별도의 프로세스를 사용한다. 각 탭은 독립적인 프로세스로 실행되므로 하나의 탭에서 문제가 발생하더라도 다른 탭과 브라우저 자체에는 영향을 주지 않는다. 이것은 안정성과 보안 면에서 이점을 제공하지만 이로 인해 메모리 사용량이 더 높을 수 있다.


6. 컨텍스트 스위칭이란?

PCB는 프로세스에 대한 모든 정보가 모여있는 곳으로 Task Control Block(TCB)이라고도 한다. 각각의 프로세스마다 PCB가 따로 존재한다. PCB 들은 OS의 Process management가 관리한다. PCB에 들어있는 정보는 다음과 같다.

  • process state : 현재 프로세스의 state.
  • PC : 프로세스가 다음에 실행할 명령어의 주소.
  • MMU info : base와 limit 값.
  • CPU time : 현재 프로세스의 CPU 사용량.
  • process id : 프로세스마다 번호를 붙임. 주민번호나 학번 개념과 유사.
  • list of open files : 하드디스크의 어떤 파일들을 사용하는지

컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것을 말한다. 예를 들어 프로세스 A가 running 상태, B가 ready 상태라 가정하자.

  1. 스케줄러가 A 프로세스의 실행을 중단하고 B 프로세스를 실행하도록 요청한다.
  2. A 프로세스에서 SP(Stack Pointer)의 값과 PC(Program Counter)의 값을 PCB에 저장한다.
  3. A 프로세스는 ready or block 상태로 바뀌고 B 프로세스의 상태가 ready에서 running 상태로 바뀐다. 이처럼 현재 CPU 데이터는 이전 프로세스의 PCB에 갱신하고, 새로 시작되는 프로세스의 PCB 데이터를 CPU로 복원해주는 작업을 dispatcher라고 한다.
  4. 반대로 B 프로세스에서 A 프로세스로 컨텍스트 스위칭할 경우, B 프로세스의 SP 값과 PC 값을 PCB에 저장하고 A 프로세스의 PCB에서 SP 값과 PC 값을 찾아 덮어씌운다.

7. 스케줄러 종류(Short, Medium, Long)

Long term scheduler (Job scheduler)

job queue 안의 프로세스들의 순서를 정해주는 것을 job Scheduler라고 한다. job Scheduler는 long term Scheduler라고도 부른다. 메모리가 꽉 차있는 경우를 생각해 보자. job Scheduler는 프로세스가 완전히 끝나고 메모리가 비워져야 일어나는데 이러한 일은 자주 일어나지 않고 대략 몇 분 간격으로 일어나기 때문이다. 또한 job Scheduler는 CPU/IO bound process 들을 적절히 섞어서 올리는 것이 중요하다.

  • CPU bound process : 프로세스가 하는 일들이 주로 CPU를 사용하는 것, 대표적으로 일기예보.
  • I/O bound process : 프로세스가 하는 일들이 주로 I/O 관련 작업, 대표적으로 word 같은 문서 편집.

Medium term scheduler (Swap out)

OS의 역할 중 하나는 성능 향상이다. 만약 메인 메모리에 A라는 프로세스가 활동하지 않는다면 이 프로세스에 CPU time을 할애하는 건 비효율적이다. Medium term Scheduler는 주기적으로 메인 메모리에 있는 프로세스들을 검사하여 하드디스크로 옮길 프로세스를 찾아서 옮겨준다.

  • swap out : 프로세스 관리부서에서는 PCB의 CPU time을 토대로 일정 시간 동안 활동하지 않는 프로세스를 찾아서 하드디스크로 내쫓는다.
  • swap disk : 내쫓아진 프로세스가 위치하는 곳으로 하드디스크에 별도로 공간이 할당된다. backing store라고도 불린다.
  • swap in : 내쫓아진 프로세스가 swap disk에 있다가 다시 작업을 해서 메인 메모리에 올라온다.
    이러한 과정을 통칭해서 swapping이라고 한다. Process management는 비어있는 메모리에 다른 프로세스를 올리거나 A와 C에 더 할당하는 식으로 효율적으로 관리할 수 있다.

Short term scheduler (CPU scheduler)

ready queue 안의 프로세스들의 순서를 정해주는 것을 CPU Scheduler라고 한다. CPU의 스위칭은 굉장히 빠르므로 CPU Scheduler는 short term Scheduler라고도 부른다.

job queue, ready queue, device queue 모두 OS의 Process management에 들어있다. 또한 queue 안에는 PCB 들이 줄을 서서 대기한다.


8. Blocking vs Non-Blocking, Synchronous vs Asynchronous

Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

Blocking/Non-Blocking은 현재 작업이 block 되느냐 아니냐에 따른 제어의 관점

Synchronous : 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미
Asynchronous : 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작 하지 않음을 의미

Synchronous/Asynchronous는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 따른 순서와 결과(처리) 관점

  1. Blocking + Synchronous : 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고 다른 작업의 완료 여부를 바로 받아 순차적으로 처리하는 방식
    ex) 자바의 코드 실행 후 커멘드에서 입력을 받는 경우
  2. Nonblocking + ASynchronous : 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않는 방식
    ex) 웹 브라우저의 파일 다운로드
  3. Blocking + Asynchronous : 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리는, 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는 방식이다.
    ex) 보통 개발자 실수..
  4. Nonblocking + Synchronous : 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 다른 작업의 결과를 바로 처리하여 작업을 순차대로 수행하는 방식
    ex) 특정 어플리케이션을 설치하는 동안 화면에 나타나있는 로딩율

9. CPU 스케줄링 알고리즘

CPU 스케줄링은 어떤 프로세스가 CPU를 사용할 수 있게 하는지를 결정하는 정책이다. 방식은 크게 비선점형과 선점형으로 나뉜다.

비선점형 방식(non-preemptive) : CPU가 특정 프로세스를 수행 중에 다른 프로세스가 CPU를 선점할 수 없고 프로세스가 스스로 CPU 소유권을 포기하는 방식

  1. FCFS : 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘이다. convoy effect가 발생할 수 있다.

    convoy effect : CPU를 많이 필요로 하지 않는 프로세스들이, CPU를 오랫동안 사용하는 프로세스가 끝나기를 기다리는 현상

  2. SJF : 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘이다. 평균 대기 시간이 가장 짧으며 starvation이 일어날 수 있다. 하지만 실제로는 실행 시간을 알 수 없어서 과거 실행했던 시간을 토대로 유추해서 사용한다.

    starvation : 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태

선점형 방식(preemptive) : CPU가 특정 프로세스를 수행 중에 다른 프로세스에게 CPU를 선점해주는 방식

  1. 라운드 로빈 : 현대 컴퓨터가 쓰는 스케줄링 방법이며 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘이다. 할당 시간이 너무 크면 FCFS가 되고 짧으면 컨텍스트 스위칭이 잦아져서 오버헤드, 즉 비용이 커진다. 일반적으로 전체 작업 시간은 길어지지만 평균 응답 시간은 짧아진다는 특성이 있다. 로드밸런서에서 트래픽 분산 알고리즘으로 쓰인다.

  2. SRF(Shortest Remaining (Time) First : 중간에 실행 시간이 더 짧은 작업이 들어와도 기존 짧은 작업을 모두 수행하고 그다음 짧은 작업을 이어 나가는 SJF에 비해 중간에 만약 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘

  3. 다단계 큐 : 우선순위에 따른 준비 큐를 여러 개 사용하고 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것을 말한다. 큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어지는 특성이 있다. 우선순위가 높은 큐부터 처리되기 때문에 낮은 큐의 프로세스가 처리가 안되는 기아 현상이 발생할 수도 있다.

10. Convey effect vs Starvation

Convey effect : 몇 개의 시간이 오래 걸리는 프로세스로 인해 다른 프로세스의 실행이 느려지고 전체적인 프로세스의 성능을 저하시키는 현상으로 FCFS 알고리즘을 사용할 때 나타나는 현상이다.

Starvation : 우선순위가 자꾸 밀려서 해당 프로세스가 아예 실행 안되는 즉 무기한으로 CPU 실행으로부터 대기할 때 발생한다. SJF 알고리즘을 사용할 때 나타날 수 있는 현상으로 aging을 통해 해결할 수 있다. 여기서 aging이란 오래된 작업일수록 우선순위를 높이는 방법을 의미한다.

profile
Problem Solving과 기술적 의사결정을 중요시합니다.

0개의 댓글