운영체제 예상질문 10선

이상훈·2023년 8월 11일
1

CS

목록 보기
13/27

1. 데드락(교착 상태)이 뭔가요? 발생 조건에 대해 말해보세요.

교착상태 : 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태로 무한히 다음 자원을 기다리게 되는 상태를 말한다. 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.

  • 상호 배제(Mutual Exclusion) : 한 자원에 대한 여러 프로세스의 동시 접근은 불가능하다. 즉, 하나의 자원을 특정 시기에 하나의 프로세스나 스레드만 소유할 수 있는 형태를 의미한다.
  • 점유와 대기(Hold and Wait) : 하나의 자원을 소유하고 다른 프로세스 혹은 스레드의 자원을 요청하는 상태이다.

  • 비선점(Non preemptive) : 하나의 프로세스나 스레드에게 주어진 자원은 해당 프로세스나 스레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태. 즉, 다른 프로세스에서 자원을 사용하는 동안 자원을 강제로 가져올 수 없다.

  • 환형 대기(Circle wait) : 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있는 것을 말한다. 두 개의 프로세스나 스레드의 경우, A -> B, B -> C, C -> A 에게 서로 자원을 요청하고 기다리는 상황, 프로세스가 요구하는 자원의 방향이 원형을 이룬다.


2. 프로세스와 쓰레드의 차이에 대해 설명해주세요.

 프로세스는 실행 중인 프로그램을 말하며, 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않는다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.

 쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)영역을 공유하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있다. 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행된다.


3. 동기와 비동기의 차이에 대해 설명해주세요.

 동기는 순차적, 직렬적으로 테스크를 수행하고, 비동기는 병렬적으로 테스크를 수행한다. 예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때, 동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 테스크들은 블로킹(Blocking, 작업 중단)된다.

 비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 테스크를 계속해 수행한다.


4. Context Switching이란 무엇인가요?
Context switching은 CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것을 말한다. 즉, 한 프로세스가 실행중인 것을 멈추고 다른 프로세스가 실행되는 것이다.

  • Scheduler: 여기서 스케줄러는 CPU Scheduler를 말하며, CPU가 어느 프로세스를 선택할지 정한다.
  • Dispatcher: 실제 context switching이 발생하면 CPU의 내부 데이터를 이전 프로세스 데이터에서 새로 시작되는 데이터로 바꿔준다. 다시 말해서 현재 CPU 데이터는 이전 프로세스의 PCB에 갱신하고, 새로 시작되는 프로세스의 PCB 데이터를 CPU로 복원(restore) 해준다.
  • Context switching overhead: Context switching이 발생할 때마다, dispatcher에서 수행하는 작업을 매번 수행해야하며 이 모든 것은 overhead이다. 그리고 문맥 전환은 매우 자주 발생하는 작업이므로 overhead를 줄이기 위해서는 dispatcher를 구현하는 코드에 대한 효율을 최대한 높여주어야한다.

5. 임계영역이 무엇인가요? 임계 영역이 문제가 발생하지 않도록 만족해야 하는 조건이 있나요?

임계 영역 : 여러 프로스세가 동시에 공유해서 사용하면 안 되는 자원에 접근하고 실행하는 프로그램의 코드 부분

임계 영역이 문제가 발생하지 않도록 만족해야 하는 조건

  • 상호 배제(Mutual exclution) : 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.

  • 진행(Progress) : 임계 영역에 들어간 프로세스가 없는 상태에서, 들어가려 하는 프로세스가 여러개라면 어느 것이 들어갈지 결정해주어야 한다.

  • 한정 대기(Bounded waiting) : 다른 프로세스의 기아(Starvation)을 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 영역에 들어갈 때 제한을 두어야 한다.


6. 시스템 콜이 무엇인가요?
 응용프로그램에서 시스템 커널에 어떠한 기능을 수행해 달라고 요청하는 것을 의미한다. 사용자가 직접 커널에 접근할 수는 없기 때문에, 이를 시스템 콜을 통해 대신하는 것이다. 리눅스의 프로세스 정지 명령어나 fork 명령어, 파일을 오픈, 클로즈 하거나 읽는 등 open, read, close 등의 명령들도 모두 시스템 콜에 해당된다.


7. 스레싱이 무엇인가요?

 스레싱은 메모리의 페이지 폴트율이 높은 것을 의미한다. 스레싱은 메모리에 너무 많은
프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생한다. 페이지폴트가
일어나면 CPU 이용률은 낮아진다. CPU 이용률은 낮아지게 되면 운영체제는 CPU의
가용성을 높이기 위해 더 많은 프로세스를 메모리에 올리게 된다. 이러한 악순환이
반복되어 스레싱이 일어나게 된다. 이를 하드웨어적으로 해결하는 방법으로는 메모리를 늘리거나 HDD를 사용한다면 HDD를 SSD로 바꾸는 방법이 있으며 운영체제에서 해결하는 방법은 작업세트와 PFF가 있다.


8. 인터럽트가 무엇인가요?
 인터럽트(interrupt)는 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말한다. CPU는 메모리에 있는 명령어(instruction)을 순차적으로 실행하는데 인터럽트가 발생되면 점프해서 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트핸들러 함수(인터럽트 서비스 루틴, ISR이라고도 함)가 실행되며 특정 명령어를 실행하게 된다. 이후 인터럽트가 종료되면 다시 순차적으로 실행된다.

  • 하드웨어 인터럽트
     IO 디바이스 등 하드웨어에서 발생하는 인터럽트이다. 예를 들어 마우스를 기반으로
    버튼을 클릭할 때, 디스크에서 파일읽기, 쓰기 작업이 완료되었을 때 발동된다.

  • 소프트웨어 인터럽트
     트랩(trap)이라고도 한다. 프로세스 오류, 프로세스의 종료, 시작 등을 기반으로
    프로세스에서 발생하는 인터럽트이다. 하드웨어 인터럽트보다 우선순위가 높은
    인터럽트다.


9. 페이지 폴트 과정을 설명해주세요
1. 어떤 명령어가 유효한 가상주소에 접근했으나 해당 페이지가 만약 없다면 트랩이
발생되어 운영체제에 알리게 된다.
2. 운영체제는 실제 디스크로부터 사용하지 않은 프레임을 찾는다.
3. 해당 프레임을 실제 메모리에 가져와서 페이지 교체 알고리즘을 기반으로 특정페이지와
교체한다. (이때 스와핑이 일어납니다.)
4. 페이지테이블을 갱신시킨 후 해당 명령어를 다시 시작한다.

10. 세그멘테이션이란 무엇인가요?
 페이징 기법이 물리적으로 크기가 고정된 page, frame 단위로 메모리를 나누었다면, 세그멘테이션은 프로세스를 크기가 동적으로 변할 수 있는 단위인 세그먼트로 나누는 것이다. 세그먼트는 프로그램을 구성하는 서브 루틴, 프로시저, 함수나 모듈 등으로 구성된다. 즉, 각 세그먼트는 연관된 기능을 수행하는 하나의 모듈 프로그램으로 이해할 수 있다. 그러나 세그멘테이션 방식은 세그먼트들을 단위로 해서 메모리에 적재하다 보니, 외부단편화가 발생할 수 있다.

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

0개의 댓글