티끌모아 태산

면접 대비(운영체제) 본문

취업 준비

면접 대비(운영체제)

goldpig 2024. 4. 15. 23:56
728x90

1. 운영 체제란 무엇인가?

더보기

운영 체제란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어로써 컴퓨터 사용자를 위한 역할하드웨어를 위한 역할로 나눠볼 수 있다. 사용자에게는 컴퓨터를 더 편리하고 효율적으로 사용할 수 있도록 환경을 제공하며 하드웨어에서는 CPU와 메모리, I/O 장치 등 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할을 한다. 

2. 시분할 시스템이란 무엇인가?

더보기

CPU의 작업시간을 여러 프로그램이 조금씩 나눠쓰는 시스템을 의미한다. 

3. Multi-Programming-System이란 무엇인가?

더보기

메모리 공간을 분할 해 여러 프로그램들을 동시에 메모리에 올려 놓고 처리하는 시스템이다. 

4. 커널이란 무엇인가?

더보기

커널이란 운영체제의 핵심 코드로 하드웨어와 응용 프로그램 사이의 인터페이스를 제공하며 응용 프로그램이 하드웨어로부터 오는 자원을 관리하고 사용할 수 있도록 해준다. 그래서 보통 프로세스 관리, 메모리 관리, 입출력 관리, 파일 시스템 관리 등의 기능을 제공한다.

5.  ⭐인터럽트란 무엇이고 기본적인 동작과정을 설명해주세요.

더보기

인터럽트란 하드웨어와 CPU사이의 통신 도구로 볼 수 있다. 일반적으로 프로그램이 실행하는 도중에 예기치 않은 상황 (입출력 요청 등)이 발생하는 경우 현재 실행 중인 작업을 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 보고하는 것으로 하드웨어 인터럽트소프트웨어 인터럽트가 있다. 전자는 CPU 외부의 하드웨어 장치에 의해서 발생하며 타이머 인터럽트입출력 요청 등이 있다. 후자는 exception 이라고도 하며, 명령어를 실행하던 도중에 CPU에 의해서 발생하며 시스템 콜 등이 있다. 

 

1. CPU는 메모리에 있는 명령, 정확히는 프로그램 카운터가 가리키고 있는 명령을 읽어와 작업을 수행한다. 

2. 작업을 수행하는 도중에 인터럽트 요청이 들어온다. (하드웨어 또는 소프트웨어 인터럽트)

3. CPU는 하던 작업을 멈추고, 다음 실행할 명령어와 현재 상태를 PCB(Process Control block)블록에 저장한다. 그리고 나서 인터럽트 핸들러로 점프를 한다. *인터럽트 핸들러는 인터럽트가 발생했을 때, '인터럽트 컨텍스트'에서 실행되는 커널 제어 경로(Kernel Contorl Path, KCP)다. 그렇기 때문에, 현재 프로세스의 컨텍스트 내에서는 실행되지 않는다. 

4. ISR(Interrupt Service Routine)을 실행한다. 

5. 인터럽트 처리 후 기존 상태를 복구한다. * CPU의 제어권이 인터럽트가 발생하기 직전의 프로세스에게 다시 넘어간다.

6. 기존 프로그램을 계속 수행한다. 

 

*PCB는 각각의 프로그램마다 하나씩 존재하며, 해당 프로그램의 어느 부분이 실행중이 었는지 '실행 상태'를 저장한다. 

*인터럽트 핸들러로 점프를 하면 CPU의 제어권이 사용자 프로그램에서 인터럽트 처리 루틴으로 넘어간다. 

6. 프로세스란 무엇인지 설명하고 프로그램과의 차이점을 설명해주세요.

더보기

프로세스란 실행중인 프로그램을 말한다. 즉, 디스크에 존재하던 실행 파일 형태인 프로그램이 메모리에 적재된 후, CPU를 획득하여 명령어를 수행하게 되는데, 이렇게 실행되는 프로그램을 프로세스라고 한다. 그래서 프로그램과의 차이점은 CPU를 획득하여 명령어를 수행하는 상태를 프로세스 라고 하며, CPU를 획득하지 못해 실행되지 않는 상태를 프로그램이라고 합니다.

7. ⭐⭐⭐프로세스와 스레드의 차이점을 설명해 주세요

더보기

프로세스는 메모리 상에서 CPU를 획득해 현재 실행중인 프로그램을 의미하고, 스레드는 프로세스 내부에서 실행되는 작업 흐름 단위다. 기본적으로 하나의 프로세스가 생성될 때, 하나의 스레드도 함께 생성된다. 

프로세스는 독립적인 주소 공간을 할당 받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원 등을 공유한다는 차이가 있다. 구체적으로 스레드는 프로세스와 Stack 영역을 제외한 Code, Data, Heap 영역을 공유한다. 그러면 stack만 따로 할당 받는 이유는 무엇일까? 스레드는 독립적인 수행을 위해 존재하기 때문에 독립적으로 함수를 호출 할 수 있어야 한다. 그래서 함수의 매개변수, 지역 변수 등을 저장하는 스택 메모리 영역은 독립적으로 할당 받아야 한다. 

8. 프로세스 제어 블록이란 무엇인가?

더보기

PCB란 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담기 위한 커널 내 자료구조다. 그래서 이 PCB에는 프로세스 ID, 프로세스의 상태, 프로그램 카운터 값, CPU  레지스터 값, 메모리 정보, CPU 스케줄링 정보 등이 저장된다. 

9. 현대의 CPU는 적어도 User Mode와 Kernel Mode라는 두 가지 운영모드를 구분하는 하드웨어 지원을 제공합니다. 그러면 이렇게 사용자 모드와 커널 모드로 구분하는 이유는 무엇일까요?

더보기

사용자 모드와 커널 모드를 구분하는 가장 큰 이유는 보안적인 측면 때문입니다. 따라서 중요한 정보에 접근해 위험한 상황을 발생시킬 수 있는 연산은 커널 모드에서만 실행되도록 하고, 그렇지 않은 일반적인 연산은 사용자 모드에서 수행하도록 통제하여 보안성을 확보하게 됩니다. 

10. 사용자 모드와 커널 모드가 무엇인지 설명하고, 각 영역이 어떻게 스위칭 하는지 예를들어 설명해 주세요.

더보기

사용자모드는 사용자가 응용 프로그램을 사용하기 위해 접근하는 영역이다. 예를들어, 사용자 모드에서 프로세스를 실행할 수 있고, 코드를 작성하는 등의 행위를 할 수 있다. 하지만 특정 영역에 대한 접근 제한이 있다. 반면에, 커널 모드는 접근 제한 없이 모든 시스템 메모리와 모든 명령어들에 접근이 가능한 실행모드로 CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 등의 일을 한다. 

 

프로세스는 유저모드에서 실행되다가 인터럽트가 발생하거나 커널에 의한 처리가 필요할 때, 시스템 콜을 이용해서 모드 스위칭을 하게 된다. 그래서 커널에서 이를 처리한 후 다시 유저모드로 돌아간다.

11. 스케줄러가 무엇인지 설명해주세요.

더보기

스케줄러란 어떤 프로세스에게 자원을 할당할 것인지를 결정하는 운영체제 커널 코드다. 예를들어, 중기 스케줄러와 단기 스케줄러가 있는데, 

1. 중기 스케줄러너무 많은 프로세스에게 메모리를 할당할 경우 시스템 전체의 성능이 저하되는 문제가 발생합니다. 그래서 이러한 문제를 해결하고자 메모리에 적재된 프로세스의 수를 동적으로 조절하는 역할을 합니다. 예를들어, 메모리에 올라와있는 프로세스들 중에서 일부를 선정해(봉쇄상태 프로세스, 타이머 인터럽트가 발생해 준비 큐에있는 프로세스 등)이들로부터 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑 영역에 저장하게 됩니다.

2. 단기 스케줄러는 준비 큐에 있는 여러 프로세스들 중에 어떤 프로세스에게 CPU를 할당할 것인가를 결정하는 스케줄러입니다.

12. 프로세스의 생성에 대해서 간단하게 설명해주세요.

더보기

시스템을 부팅하면 최초의 프로세스는 운영체제가 직접 생성한다. 하지만 그 이후 부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성하는 방식이다. 여기서 새로운 프로세스를 생성하는 프로세스를 부모 프로세스라 하고 생성된 프로세스를 자식 프로세스라고 한다. 그래서 일반적으로 프로세스가 수행되는 모델2가지가 있다.

 

1. 부모와 자식이 공존하며 수행되는 모델로 부모와 자식이 CPU를 획득하기 위해 경쟁하는 관계입니다.

2. 부모가 자식이 종료될 때까지 기다리는 모델로 자식 프로세스가 종료될 때까지 부모 프로세스는 아무일도 하지 않고 봉쇄상태에 있다가, 자식 프로세스가 종료되면 부모 프로세스는 봉쇄 상태에서 준비 상태가 되어 다시 CPU를 획들할 권한이 생기게 됩니다.

 

그래서 프로세스를 복제 생성하기 위한 방법으로 다음과 같은 시스템 콜이 있습니다.

 

1. fork() system call: 기존프로세스와 동일한 프로세스 를 생성 즉, 프로세스 ID를 제외한 모든 정보를 그대로 복사하는 방식입니다. 따라서 부모와 자식은 주소 공간을 독립적으로 갖더라도 동일한 내용을 갖게 됩니다.

2. exec() system call: 새롭게 수행하려는 프로세스를 자식 프로세스의 주소 공간에 덮어 씌우는 개념입니다. 따라서 자식 프로세스가 독자적인 프로그램을 수행하기 위해서는 exec() 시스템 콜을 통해서 새로운 프로그램으로 기존의 주소 공간을 덮어씌우게 됩니다.

13. 프로세스간 협력에 대해서 간략하게 설명해 주세요

더보기

프로세스는 각각 독립적인 주소 공간을 갖고 수행하기 때문에 다른 프로세스의 주소 공간(코드, 데이터, 스택) 을 참조하는 것을 허용하지 않습니다. 하지만 경우에 따라서는 프로세스 수행의 효율성을 높이기 위해 프로세스간 협력을 할 수 있습니다. 그래서 협력을 통해 정보를 공유하고 처리 속도가 향상될 수 있어 몇몇 측면에서는 효과적일 수 있습니다.

 

그래서 프로세스간 협력을 하기 위해서는 IPC(inter-Process-coommunication) 매커니즘을 통해 수행하게 됩니다. 대표적인 방식으로 메시지 전달 방식공유메모리 방식이 있습니다. 전자는 프로세스간 공유 데이터를 일체 사용하지 않고 메시지만을 주고 받으면서 통신하는 방식입니다. 후자는 일부 메모리를 공유하는 방식인데 이 방식은 잘못하면 데이터 일관성 등의 문제가 발생할 수 있습니다. 그래서 결국 두 방식의 차이점은 공유데이터 사용 유무입니다.

14. CPU 스케줄링에 대해서 설명해 주세요.

더보기

CPU는 프로그램 카운터가 가리키고 있는 주소의 기계어 명령어를 실제로 수행하는 중앙처리장치입니다. 그래서 CPU 스케줄링은 CPU를 효율적으로 활용하기 위해 준비 상태에 있는 프로세스들 중 어떤 프로세스에게 먼저 CPU를 할당할 것인지 결정하는 운영체제 코드입니다. 그래서 스케줄링 방식에는 2가지 방식이 있습니다.

  1. 비선점형 방식(nonpreemptive): CPU를 획득한 프로세스가 CPU자원을 스스로 반납할 때까지 CPU를 빼앗기지 않는 방식입니다.
  2. 선점형 방식(preemptive): 프로세스가 CPU를 강제로 빼앗을 수 있는 방식입니다.

그래서 CPU 스케줄러에 의해서 어떤 프로세스에게 CPU를 할당할지 결정 했다면 CPU를 이양하는 작업이 필요합니다. 이처럼 새롭게 선택된 프로세스가 CPU를 할당 받고 작업을 수행할 수 있도록 환경설정을 하는 운영체제 코드를 디스패처(dispatcher)라고 합니다.

15. CPU와 GPU의 차이점을 설명해 주세요.

더보기

CPU와 GPU는 컴퓨터 칩으로 칩 안에는 연산 처리를 담당하는 코어가 있다. 

 

[CPU]

일반적인 컴퓨터가 수행하는 (예를들어, 산술 논리 연산) 거의 대부분의 연산을 처리할 수 있는 코어들이 직렬로 연결되어 있다. 그렇다보니 코어의 크기가 크고, 범용적으로 활용할 수 있고, 직렬로 연결되어 있기 때문에 순차적으로 연산을 처리한다. 

 

[GPU]

GPU는 여러 연산들 중에서 그래픽 처리와 관련있는 연산에 특화된 코어만 수천개가 병렬로 연결되어 있다. 코어당 크기가 작고, 비교적 제한된 범위지만 특정 연산 방식에서 만큼은 매우빠른 처리 속도를 보이는 것이 특징이다. 

 

비유를 하면 CPU는 여러 과목에서 높은 성적을 학생 몇명으로 구성된 집단이고 GPU는 특정 과목에 대해서만 높은 성적을 보이는 몇백명으로 구성된 집단이다.

16. ⭐선점형 방식과 비선점형 방식에는 어떤 스케줄링 종류가 있는지 몇 개 설명하고 특징들을 설명해 주세요.

더보기

먼저 비선점형 방식에는 다음과 같은 종류가 있습니다.

  1. 선입선출 스케줄링: 준비 큐에 도착한 순서대로 CPU를 할당받는 방식입니다. 하지만 실행시간이 짧은 프로세스가 뒤에 있고, 실행시간이 긴 프로세스가 앞에 있는 경유 평균 대기 시간이 길어질 수 있다는 단점이 있습니다.
  2. 최단 작업 스케줄링: 평균 대기시간 문제 보완으로 수행시간이 가장 짧은 작업부터 먼저 수행하는 방식입니다. 따라서 선입선출 방식보다 평균 대기 시간이 줄어들고 짧은 작업에 유리하다는 장점이 있습니다.

다음은 선점형 스케줄링에 대해서 말씀드리겠습니다.

  1. 우선순위 스케줄링프로세스에 우선순위를 부여하여 우선순위가 가장 높은 프로세스에게 CPU를 할당하는 방식입니다. 하지만 이러한 방식은 우선순위가 높은 프로세스가 계속 도착하는 상황에서는 우선순위가 낮은 프로세스는 무한정 기다리는 기아현상 즉, starvation 이 발생하게 됩니다. 이러한 문제는 노화(aging)기업을 통해 해결할 수 있는데, 노화기법은 기다리는 시간이 길어질 수록 우선순위를 높여주는 방식을 말합니다.
  2. 라운드 로빈 스케줄링: 시분할 시스템의 성질을 가장 잘 활용한 방식으로 특정 프로세스가 CPU를 보유하는 시간을 제한하여 제한된 시간이 되면 다른 프로세스에게 CPU를 넘기고 준비 큐의 맨 뒷줄에 서서 다음 차례가 올 때까지 기다리게 하는 방식입니다. 이렇게 CPU를 연속적으로 사용할 수 있는 최대 시간을 time quantum이라고 하며 이 시간을 적절하게 잘 설정하는 것이 중요합니다. 하지만 이 시간을 적절하게 설정하는게 어렵다...

17. ⭐시스템 콜이 무엇인가요?

더보기

시스템 콜은 사용자 프로그램, 즉 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스다. OS는 사용자가 하드웨어의 주요 자원에 쉽게 접근할 수 없게 커널 모드와 사용자 모드로 구분합니다 .그래서 프로세스에서 자원에 접근해 작업을 처리해야 할 때는 시스템 콜로 필요한 요청을 하고 그에 대한 결과 값을 돌려받게 된다.

18. Context Switching이란 무엇인가?

더보기

문맥교환이란 CPU를 양도하기 위해 원래 프로세스(A)의 문맥(상태)을 저장하고 새로운 프로세스(B)의 문맥(상태)을 세팅하는 과정을 말한다. 이는 디스패치 개념과 연관이 있는데, 디스패치란 준비 상태에 있는 여러 프로세스(Read list) 중 실행될 프로세스를 선정(Scheduling)하여 CPU를 넘겨주는 과정(Dispatching)을 말한다. 

19. Process Context에 대해서 설명해 주세요. 그리고 Process Context Switching에 대해서 설명해주세요. (18번이랑 같음)

더보기

프로세스를 이해하기 위해서는 프로세스 문맥을 이해할 필요가 있습니다. 프로세스 문맥이 필요한 이유는 프로세스가 타이머 인터럽트, 시스템 콜, 입출력 요청 등과 같은 인터럽트에 의해서 CPU의 제어권이 User Mode에서 Kernel Mode로 넘어갔다가 다시 넘겨 받아 수행하기 위해서는 CPU 보유시기에 어느 부분까지 명령을 수행했었는지 정확한 상태를 알아야 하기 때문입니다. 그래서 Process Context Switching은 CPU의 제어권을 새로운 프로세스에게 넘겨주기 위해 원래 프로세스의 문맥(상태)를 PCB에 저장하고 새로운 프로세스의 문맥을 세팅하는 과정이라고 보면 됩니다. *헷갈리지 말기

  • 문맥 교환이 일어나지 않는 경우: 사용자 프로세스A -->(인터럽트 또는 시스템 콜) --> (커널 모드) --> 문맥 교환 없이 사용자 모드로 복귀 --> (사용자 모드) 사용자 프로세스 A
  • 문맥 교환이 발생하는 경우: 사용자 프로세스A --> (타이머 인터럽트 또는 입출력 요청 시스템콜) --> (커널 모드) --> 문맥 교환이 일어남 --> (사용자 모드) 사용자 프로스세 B

그리고 문맥교환이 비번하게 일어나면 오버헤드가 상당히 커지기 때문에 타이머에 적절한 CPU 할당시간을 정하는 것이 중요합니다.

20. CPU 스케줄링 척도는 무엇이 있고, 설명해 주세요

더보기

1. Response time(응답시간): 프로세스가 준비에 들어온 후 첫 번째 CPU를 획득하기 까지 기다린 시간

2. Turnaround time(소요시간): 실행 시간과 대기 시간을 모두 합한 시간으로 작업이 완료될 때까지 걸린 시간

21. Linux에서는 linear address를 3:1로 나누어 1/4를 kernel에 할당하는 이유는 무엇인가?

더보기

일반적으로 linear address(logical address)에서 3을 유저가, 1을 커널이 차지한다. 이렇게 커널 코드를 따로 하나의 프로세스에 할당하지 않고 유저 프로세스 영역을 나눠서 1/4만 할당하는 이유는 전체 프로세스간 스위칭(유저프로세스 4GB + 커널 프로세스 4GB)으로 인해 발생하는 오버헤드를 줄이기 위해서이다. 즉, 커널 코드를 하나의 새로운 프로세스에 할당해 4GB를 모두 사용한다면 타이머 인터럽트 등으로 인해 전체 프로세스간 스위칭이 많이 발생하게 되는데 이에 따른 오버헤드가 발생하기 때문이다. 그래서 이 오버헤드를 줄이고자 유저 Process에 영역을 나누어서 할당하는 것이다. *오버헤드, 전체 프로세스간 스위칭 > 하나의 프로세스에서 모드 스위칭.

 

  물론 4GB를 모두 사용할 수 있다는 장점이 있지만 오버헤드로 인한 단점이 더 크기 때문에 영역을 나눈다. 결국 하나의 유저 프로세스에서 모드 스위칭이 두 개의 프로세스간 스위칭으로 인해 발생하는 오버헤드보다 적게 발생한다. 간단한 예를들어 설명하면, 하나의 아파트에서 방3개를 유저에게, 나머지 하나를 커널에게 할당하고(유저 process에서 방하나를 OS의 커널에 부여) 여기서 모드 스위칭을 할것이냐 아니면 아파트 하나를 더 구입해서 방4개 전부를 커널에게 할당한 후 아파트와 아파트간의 스위칭을 할 것이냐라고 생각한다면 이해하기 쉬울 것이다. 아파트 하나만 할 경우 집에서 모드 스위칭이 발생하기 때문에 밖에서는 보이지 않고 하나의 아파트 안에서 모드 스위칭 해결 가능. 그러나 모든 것을 해결할 수는 없다.

  하지만 이 방식에도 단점이 있는데 그것은 하나의 프로세스에서 영역을 나누다 보니 커널 공간의 한계가 있을 수 있다.

 

*사용자 모드와 유저 모드가 분리되어 있기 때문에, 각 영역에 대한 stack도 사용자 스택과 커널 스택으로 분리되어 있다.

22. 일반적인 프로세스 모델의 상태를 각각 설명해 주세요.

더보기

일반적은 프로세스 모델의 상태는 크게 5가지로 나눠볼 수 있습니다.

1. new: 프로세스가 생성되는 상태.

2. ready: CPU를 얻기위해 대기중인 상태

3. running: 프로세스가 CPU를 얻어 명령어를 실행하는 상태

4. blocked or wating: 입출력 요청 혹은 타이머 인터럽트 등으로 인해, 프로세스가 잠시 봉쇄된 상태이다. 

5. exit or terminate: 프로세스가 작업을 완료한 상태

23. ⭐(regular) 프로세스, Lightweight 프로세스(또는 스레드), 그리고 커널 스레드 각각의 특징을 비교 해 주세요.

더보기

현대 운영체제에서는 한 프로세스 내에서 여러 쓰레드가 자원을 공유하는 멀티 스레딩이 가능하다. *멀티스레드와 멀티 프로세스는 동시에 여러작업을 한다는 점에서 유사하지만 멀티프로세스가 더 많은 메모리와 CPU를 사용한다는 단점이 있습니다.

 

  regular 프로세스는 프로그램이 메모리에 적재되어 CPU를 할당 받아 실행되는 상태를 말합니다. 이 프로세스는 독립적인 하나의 실행 단위로 자체적인 메모리 공간과 자원을 갖습니다. 그리고 프로세스간의 통신은 비용이 높고 오버헤드가 큽니다. 경량 프로세스(lightweight process)는 프로세스 내에서 실행되는 작은 실행 단위입니다. 같은 프로세스 내의 경량 프로세스는 메모리 공간을 공유합니다. 경량 프로세스간 통신은 비용이 비교적 낮고 오버헤드가 작습니다.

 

커널 스레드(kernel thread)는 운영 체제 커널 내에서 실행되는 스레드입니다. 각 커널 스레드는 thread에 의해 구현되며 독립적인 스케줄링 단위를 가지며, 운영 체제가 직접 관리합니다. 또한 커널 스레드는 메모리 공간을 공유하지 않으며, 각각 독립된 컨텍스트를 가집니다. 그리고 regular prcesss는 사용자 모드와 유저 모드를 상황에 따라 왔다갔다 하며 실행하지만 kernel thread는 오직 커널 모드에서만 실행합니다. 

 

요약하면, 프로세스는 독립적인 실행 환경을 가지며 무겁고 오버헤드가 크며, 경량 프로세스는 같은 프로세스 내에서 메모리를 공유하며 경량화되어 있습니다. 하지만 커널 스레드는 운영 체제 내부에서 동작하는 스레드로 프로세스와는 별개로 운영 체제가 직접 관리합니다.

24. 논리적 주소 공간과 물리적 주소 공간에 대해서 설명해 주세요.

더보기

먼저, 프로그램이 메모리에 올라가 CPU를 획득해 실행되면, 프로세스를 위한 독자적인 주소 공간이 생성되는데, 이 주소를 논리적 주소 혹은 가상 주소라고 한다. 반면에 물리적 주소는 물리적 메모리에 실제로 올라가는 위치를 말한다. 보통 물리적 메모리의 낮은 주소 영역에는 운영체제가 올라가고, 높은 주소 영역에는 사용자 프로세스가 올라간다. 

그리고 CPU가 명령어를 수행하기 위해 논리적 주소를 통해 메모리를 참조하게 되면 해당 논리적 주소가 물리적 메모리의 어느 위치에 매핑되는지 확인해야 한다. 이때, 프로세스의 논리적 주소를 물리적 주소와 연결시켜주는 작업을 주소 바인딩 이라고 한다. *CPU에 의해 실행되는 명령어들은 논리적 주소를 다룬다.

25. Swapping이란 무엇인가?

더보기

메모리에 존재하는 프로세스의 수를 동적으로 조절하여 현재 프로세스 실행에 필요한 적절한 메모리 공간을 확보하는 방법이다. 따라서 메모리가 부족하다면 봉쇄 상태나 혹은 준비 큐에 있는 프로세스들로부터 메모리를 통째로 빼앗아 디스크 스왑 영역에 내본 후, 추후 다시 불러들이는 방식이다. 

 

*스왑 영역은 프로세스가 수행중인 동안에만 디스크에 일시적으로 저장하는 공간으로 디스크 내의 파일 시스템과는 별도로 존재하는 일정 영역.

26. 외부 단편화와 내부 단편화란 무엇인가?

더보기

외부 단편화는 메모리에 프로세스가 할당 될 만큼 충분한 공간이 존재 하지만 공간이 쪼개져서 프로세스를 넣을 수 없는 것을 의미한다. 반면에, 내부 단편화는 프로세스가 필요한 양보다 더 큰 메모리 공간에 할당 되어 메모리가 낭비되는 것을 말한다. 

27. ⭐페이징 기법이란 무엇인가? 그리고 장단점을 설명해 주세요.

더보기

페이징 기법이란 프로세스의 주소공간을 일한 크기의 페이지 단위로 나눠 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식이다. 

장점: 하나의 프로세스가 사용하는 메모리 공간이 연속적이어여 한다는 제약을 없애 외부 단편화 문제점을 해결할 수 있다.

단점: 하지만 그만큼 Mapping 과정 또한 늘어나기 때문에 trade-off 가 발생할 수 있다. 그리고 보통 페이지 단위에 알맞게 꽉 채워 쓰는게 아니므로 여전히 내부 단편화 문제가 있다. 

28. 메모리 관리 기법을 사용하는 이유는 무엇인가?

더보기

멀티 프로그래밍 시스템에서는 여러 프로세스를 한정된 메모리 공간에서 동시에 수행하기 위해, 주기억장치(메인 메모리)를 동적 분할하여 관리하는 작업이 필요하기 때문이다. 

29. 메모리 관리 기법 중 프로세스를 물리적 메모리에 할당하는 '연속할당 방식'에 대해서 설명해라.

더보기

연속 할당 방식은 프로세스의 주소 공간이 물리적 메모리의 한 공간에 연속적으로 할당되는 방식이다. 즉, 프로세스의 주소 공간을 여러 개로 분할하지 않는 방식으로 고정 분할 기법동적 분할 기법이 있다. 전자는 주기억 장치가 고정된 파티션으로 분할되기 때문에 내부 단편화 문제가 존재한다. 반면에, 후자는 파티션들이 동적으로 생성되며 자신의 크기와 같은 파티션에 적재되지만 외부 단편화 문제가 존재. 

 

*페이지: 고정 사이즈의 작은 프로세스 조각

*프레임: 페이지 크기와 같은 주기억장치 메모리 조각

30. ⭐메모리 관리 기법 중 프로세스를 물리적 메모리에 할당하는 '불연속 할당 방식'을 설명하라.

더보기

불연속 할당 방식은 하나의 프로세스가 물리적 메모리의 여러 공간에 분산되어 올라가는 할당 기법이다. 대표적으로 프로세스의 주소 공간을 동일한 크기로 나눠 메모리에 올리는 페이징 기법, 크기는 일정하지 않지만 의미 단위로 메모리에 올리는 세그멘테이션 기법, 그리고 세그멘데이션을 기본으로 하되 이를 다시 동일한 크기의 페이지로 나눠 메모리에 올리는 페이지드 세그멘테이션 기법이 있다. 

 

*고정 크기: 페이징(Paging)

*가변 크기: 세그멘테이션(Segmentation)

31. ⭐프로세스 동기화(Synchronization)에 대해서 설명해보세요.

더보기

프로세스 동기화는 여러 프로세스 또는 스레드가 하나의 공유 자원에 접근해도 일관성을 유지하는 것을 의미한다. 공유 자원에 접근하는 코드를 임계 영역이라고 하며, 임계 영역에 대한 상호 배제 기법이 잘 이뤄져야 프로세스 동기화를 할 수 있다. 상호 배제 기법으로는 뮤텍스세마포어가 있습니다. 

32. ⭐뮤텍스와 세마포어의 차이점을 설명해 보세요.

더보기

뮤텍스와 세마포어는 프로세스 동기화를 위한 상호 배제 기법이다. 뮤텍스는 락을 가진 하나의 프로세스만 임계 영역에 접근할 수 있게하는 동기화 방식이다. 이 방식을 사용하면 임계 영역에 접근하려는 프로세스는 반복문을 돌며 임계 영역에 접근 가능한지 확인하게 되는데, 이러한 현상을 스핀락이라고 한다. 

반면에, 세마포어는 임계 영역에 특정 개수의 프로세스가 접근할 수 있게 제어하는 방식이다. 임계 영역에 접근이 불가능하면 해당 프로세스는 대기 상태로 들어가고, 이후 임계 영역을 처리 중이던 프로세스가 임계 영역을 나가면서 대기 상태인 프로세스를 깨우게 된다. 

 

*공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다. 이때, 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야한다. 

33. ⭐⭐가상 메모리가 무엇인지와 가상 메모리가 필요한 이유를 설명하시오.

더보기

가상 메모리는 프로세스 전체가 아닌 일부만 메모리 영역에 옮기고, 나머지는 보조 기억장치인 디스크에 옮겨 실제 메모리 영역보다 더 큰 영역을 사용하는 것처럼 보이게 하는 방식이다. 따라서 실제 메모리를 보조하여 프로세스 전체가 메모리에 올라와 있지 않더라도 실행이 가능하도록 해주는 역할을 한다. 그리고 가상 메모리는 한정된 메모리의 영향을 덜 받고 많은 프로세스를 실행하기 위해 필요하다. 가상 메모리를 구현하는 방법으로는 요구 페이징이 있다. 

34. ⭐요구 페이징(Demand Paging)이란 무엇인지 설명해 주세요.

더보기

요구 페이징은 가상 메모리 시스템을 구현하는 방법으로, 프로그램 실행 시 프로세스를 구성하는 모든 페이지를 한번에 메모리에 올리는 것이 아니라 당장 사용될 페이지만 올리는 방식이다. 즉, 특정 페이지에 대한 CPU의 요청이 들어온 후에 해당 페이지를 메모리에 적재한다. 요구 페이징의 장점은 메모리 사용량을 감소하고, 물리적 메모리의 용량 제약에서 벗어나 더 큰 프로그램도 실행할 수 있다. 

35. ⭐스레싱이 무엇인가요?

더보기

스레싱이란 가상 메모리 환경에서 다중 프로그래밍 정도가 높아지면서 페이지 폴트가 빈번히 발생해 CPU 이용률이 오히려 낮아지는 현상을 의미한다. 즉, 실제 시스템이 작동되는 시간보다 페이지 교체가 빈번히 일어나 발생하는 문제다. 이러한 문제를 예방하기 위해 워킹 세트를 설정할 수 있다. 워킹 세트는 지역성을 기반으로 자주 사용되는 페이지를 저장해 두는 것을 말한다. 

 

대표적인 페이지 교체 알고리즘

1. FIFO 페이지 교체: 물리 메모리에 먼저 들어온 페이지 순서대로 페이지 교체 시점에 먼저 나가게 된다. 

2. 최적 페이지 교체: 물리적 메모리에 존재하는 페이지 중 가장 먼 미래에 참조될 페이지를 교체한다.

3. LRU 페이지 교체: 가장 오랫동안 사용되지 않은 페이지를 선택해서 교체한다. 

4. MFU 페이지 교체: 참조 횟수가 가장 많은 페이지를 교체

5. NFU 페이지 교체: 참조 횟수가 가장 적은 페이지를 교체

36. 페이지 폴트란 무엇인가?

더보기

Page Fault란 지금 실행시켜야 할 페이지가 실제 메모리에 올라와 있지 않는 것을 의미한다. 따라서 페이지 폴트로 인한 I/O 작업은 CPU의 효율성을 낮추게 된다.

37. ⭐캐시 메모리에 대해서 설명해 주세요.

더보기

캐시 메모리는 CPU와 메모리 간 속도 차이를 좁히려고 사용하는데, CPU에서 자주 사용되는 데이터를 접근 속도가 빠른 캐시 메모리에 저장한다. 이때, 적중률을 높이기 위해 자주 사용하는 데이터를 저장하는 지역성 원리를 사용한다. 

38. ⭐Deadlock(교착 상태)에 대해서 설명해 주세요.

더보기

데드락은 멀티 프로세스 시스템에서 발생할 수 있는 상황으로, 각 프로세스가 서로 점유하고 있는 자원을 요구하며 무한히 대기하는 상태를 의미한다. 이런 상황에서는 어떤 프로세스도 진행할 수 없으며, 시스템의 작동이 멈추게 된다.

 

데드락은 일반적으로 다음 네 가지 필요조건이 동시에 성립할 때 발생한다. 

 

1. Mutual exclusion(상호 배제): 자원은 동시에 여러 프로세스에 의해 사용될 수 없으며, 한 번에 하나의 프로세스만 자원을 사용할 수 있다. 

2. Hold and Wait(점유 대기): 프로세스가 적어도 하나의 자원을 점유한 상태에서 다른 자원을 얻기 위해 대기하는 상태이다. (이때, 다른 프로세스가 이미 필요로 하는 자원을 점유하고 있다.)

3. No preemption(비선점): 다른 프로세스에 의해 점유된 자원을 선점할 수 없다. 자원을 사용하고 있는 프로세스가 자발적으로 반납할 때까지 기다려야한다. 

4. Circular Wait(순환 대기): 서로 다른 프로세스들이 자원을 점유하기 위해 순환적으로 대기하는 상태.

 

위 필요조건들을 모두 만족하면 데드락에 빠질 수 있다. 하지만 네 가지 필요조건을 만족했다고 해서 반드시 발생하는 것은 아니다(충분조건x). 즉, 위 네 가지 필요조건 + 특정상황이 형성.

39. 데드락을 예방하기 위한 방법이 뭐가 있는지 설명해줘라.

더보기

데드락에 빠지지 않기 위해서는 크게 3가지 방법이 있습니다.

 

1. Prevention(예방): 필요조건 중 하나를 제거하여 데드락 발생을 예방.예를들어 자원의 점유와 대기를 분리하여 상호 배제나 점유 대기 조건을 만들지 않도록 한다. 

2. Avoidance(회피): 데드락이 발생할 가능성이 높은 자원 요청을 피하기 위한 알고리즘을 활용. 대표적으로 은행원 알고리즘이 있습니다.

3. Detection and Recovery(탐지 회복): 데드락을 주기적으로 검사하여 발견하고, 발견된 경우 해당 상태를 복구하는 방법. 대표적으로 리소스 할당 그래프 알고리즘이 사용될 수 있다. 

 

40. ⭐멀티 프로세스와 멀티 스레드의 차이점을 설명해 보세요.

더보기

멀티 프로세스는 응용 프로그램 하나를 프로세스 여러 개로 구성하는 것이다. 반면에, 멀티 스레드는 한 프로세스 안에서 여러 스레드로 작업을 처리하는 것이다. 프로세스는 독립적인 메모리 공간을 갖기 때문에 프로세스간 자원 공유와 통신을 하기 위해 IPC 매커지즘을 활용해야 한다. 스레드는 자원과 공간을 공유하므로 스레드 간 통신과 자원 공유가 간단하고 프로세스 대비 콘텍스트 스위칭 비용이 적게 들지만, 동기화가 필요하다. 

41. 경쟁 상태(Race Condition)이란 무엇인가?

더보기

Race condition은 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태로, 데이터의 일관성을 해치는 결과가 나타날 수 있다. 

 

경쟁 상태가 발행할 수 있는 경우는 크게 3가지가 있습니다.

1. 커널 작업을 수행하는 도중, 인터럽트 발생

2. 프로세스가 시스템 콜을 통해 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생

3. 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때

 

경쟁 상태를 막기 위해 커널 동기화 방법이 있습니다. 동기화를 통해, 불안전한 동시성을 예방하고 경쟁 상태가 발생하지 않도록 보장할 수 있다. 

42. 데드락을 방지하기 위한 회피 기법인 '은행원 알고리즘'이 무엇인지 설명해 보세요.

더보기

은행원 알고리즘은 은행에서 모든 고객의 요구가 충족되로록 현금을 할당하는데서 유래하였습니다. 프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아 있게 되는지, 사전에 검사하여 교착 상태를 회피하는 방법이다. 그래서 안정 상태면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기한다. 

728x90

'취업 준비' 카테고리의 다른 글

면접 대비(자료구조 및 알고리즘)  (0) 2024.04.22
면접 대비(네트워크)  (0) 2024.04.15
면접 대비(DB)  (0) 2024.04.15