카테고리 없음

운영체제 기술 면접 대비

e4g3r 2025. 2. 8. 21:13

운영체제 공부를 하면서 면접에 나올 것 같은 내용을 질문으로 만들어 답변해보는 공간 (계속 업데이트)

 

Q. 운영체제는 무엇인가요?

더보기

A.  운영체제는 하드웨어를 제어하여 여러 프로세스들에게 자원을 할당하고 실행될 수 있도록 하는 프로그램입니다.
추가적으로 파일 시스템을 관리하는 기능도 있습니다.

Q. 커널이 수행하는 역할은 무엇이 있나요?

더보기

A. 프로세스 실행에 필요한 자원을 생성/제거 하며 스케줄러를 통해 여러 프로세스들이 한정된 자원을 이용할 수 있도록 합니다.
또한 프로세스가 하드웨어를 필요로 하는 (파일입출력, 네트워크 통신) 작업을 할 수 있도록 인터페이스를 제공합니다.

Q. 유저 모드와 커널 모드에 대해 설명해주세요.

더보기

A. 유저 모드와 커널 모드는 프로세스가 작업을 처리하는 모드 2가지입니다.
일반적으로 CPU의 연산만 필요로 하는 명령은 유저 모드로 실행이 되지만,
파일 입출력, 네트워크 통신, 메모리 작업처럼 하드웨어를 필요로 하는 명령은 시스템 콜을 통해 커널 모드로 전환이 되어
커널에게 작업을 요청하여 작업이 진행됩니다.

Q. 왜 유저 모드와 커널 모드로 구분 짓는 건가요?

더보기

A. 보안과 안정성을 위함입니다.
프로세스가 자신의 메모리 공간이 아닌 곳에 접근해 데이터를 수정할 수 있다면 다른 프로세스를 불안정하게 만들 수 있습니다.

이는 보안과 안정성에 좋지 않습니다.
하지만 프로세스가 직접 처리하지 않고 커널이라는 중간 관리인에게 작업을 요청하면 보안과 안정성을 높일 수 있습니다.  

Q. 시스템 콜은 무엇인가요?

더보기

A. 커널은 프로세스가 하드웨어와 관련된 작업을 처리할 수 있도록 인터페이스를 제공하는데요.
예를 들어 특정 디렉토리의 파일을 불러오는 기능, 특정 포트로 소켓을 오픈하는 기능등이 있습니다.

이러한 기능을 호출하는 것을 의미합니다.

Q. 시스템 콜 처리 되는 과정에 대해 설명해주세요.

더보기

A. 만약 프로세스가 시스템 콜을 하였다면 인터럽트가 발생되어 프로세스가 멈추고 커널 모드로 전환이 됩니다.

이후 시스템 콜이 실행되어 커널 모드로 해당 작업이 처리됩니다.
시스템 콜 작업이 완료되었다면 프로세스 준비 상태가 되어 다시 작업을 진행합니다.

Q. 인터럽트는 무엇인가요?

더보기

A. 일반적으로 예외 상황이 발생하거나, 하드웨어 입출력 장치의 작업이 시작/종료가 될 때 발생되는 신호를 의미합니다.
인터럽트 신호를 수신 한 CPU는 진행중이던 작업을 멈추고 인터럽트를 먼저 해결하게 됩니다.

Q. 인터럽트가 처리 되는 과정을 설명해주세요.

더보기

A. 인터럽트 신호가 발생되면 CPU는 작업을 중단하고 현재 작업 상태를 메모리에 백업합니다.
CPU는 전달 된 인터럽트를 처리하기 위한 서비스 루틴을 실행 합니다.
인터럽트 서비스 루틴이 완료되면 CPU는 백업 해두었던 작업 상태를 복원하여 작업을 이어서 수행하게 됩니다.

Q. 프로세스는 무엇인가요?

더보기

A. 프로그램이 실행이 되어 운영체제로부터 자원을 할당받고 메모리에 로드된 상태를 의미합니다.

Q. 쓰레드는 무엇인가요?

더보기

A. 쓰레드는 프로세스가 작업을 처리하는 단위입니다. 프로세스는 1개 이상의 쓰레드를 사용할 수 있습니다.
만약 동시에 5개의 작업을 처리하고자 하면 5개의 쓰레드를 사용하여 처리 할 수 있습니다.

Q. 프로세스가 쓰레드를 많이 사용하면 좋은건가요?

더보기

A. 프로세스가 쓰레드를 많이 사용 할 수록 동시에 처리할 수 있는 작업의 개수는 늘어날 수 있습니다.
하지만 CPU 자원은 한정적이므로 스레드 간 CPU 자원 공유로 인해 컨텍스트 스위칭이 발생하므로 오히려 성능이 저하 될 수
있으므로 무작정 쓰레드 개수를 늘리기 보단 개수를 조절해가며 판단을 해야합니다.

Q. 컨텍스트 스위칭은 무엇인가요?

더보기

A. 컨텍스트 스위칭은 CPU가 처리할 프로세스 혹은 쓰레드를 변경하기 위해 기존의 작업 상태를 백업하고 작업할 대상의
상태를 불러오는 과정을 의미합니다.

Q. CPU 스케줄링은 무엇인가요?

더보기

A. 운영체제가 한정적인 CPU 자원을 여러 프로세스들이 공정하게 사용할 수 있도록 순서를 정하는 것을 의미합니다.

Q. CPU 스케줄링의 방식은 어떤 것들이 있나요?

더보기

A. 여러 알고리즘이 있습니다. 먼저 요청 된 작업을 처리하는 방식, 작업 시간이 제일 적게 걸리는 작업을 먼저 처리하는 방식,
각 작업마다 우선 순위를 부여하여 우선 순위가 높은 작업을 먼저 처리하는 방식 등이 있습니다.

윈도우의 경우 각 작업마다 우선순위를 부여하여 우선순위가 높은 작업들을 처리하는 방식을 사용하며 각 작업들은 정해진 작업 시간만큼 CPU 자원을 사용할 수 있습니다. 리눅스의 경우는 각 작업마다 실행 시간을 추적하여 가장 적게 작업이 진행된 프로세스부터 
처리되도록 합니다. 정해진 작업 시간은 없고 모든 프로세스가 비슷한 작업 비율을 만들기 위해 동적으로 작업시간이 정해집니다.

Q. 멀티 프로세스와 멀티 쓰레드는 무엇인가요? / 차이는 무엇인가요?

더보기

A. 멀티 프로세스는 여러개의 프로세스를 생성하여 여러 작업을 동시에 처리하는 방법이고
멀티 쓰레드는 프로세스 내부적으로 새로운 쓰레드를 생성하여 처리하는 방법입니다.
멀티 프로세스 방식은 프로세스 간 독립적으로 처리되기 때문에 자원 공유 및 통신이 힘들지만 하나의 프로세스가 문제가 생겨도
나머지 프로세스는 문제 없이 처리될 수 있습니다.
멀티 쓰레드 방식은 여러 쓰레드가 하나의 프로세스에서 관리되기 때문에 쓰레드 간 자원 공유 및 통신은 비교적 수월하지만
하나의 쓰레드에 문제가 생긴다면 다른 쓰레드에도 영향이 갈 수 있습니다.

Q. 멀티 프로세스 / 멀티 쓰레드 환경에서 동시성 문제라는 것은 어떤 걸 의미하는건가요?

더보기

A. 여러 개의 프로세스 혹은 쓰레드가 공유 자원에 동시에 접근하여 작업을 할 때 처리 된 순서에 따라 값이 다르게 나타나거나
데이터의 일관성이 깨지는 것을 의미합니다.

Q. 그럼 동시성 문제를 해결하기 위한 방법엔 무엇이 있나요?

더보기

A. 공유 자원에는 하나의 프로세스/쓰레드만 접근 가능하도록 Lock 방식을 사용할 수 있습니다.
공유 자원에 접근하려면 프로세스/쓰레드는 Lock을 획득해야 하며 이미 다른 프로세스/쓰레드가 Lock을 소유하고 있다면
반환될 때 까지 기다려야 합니다. 뮤텍스 Lock 기법이 유사한 방식입니다.

Q. 뮤텍스 Lock 기법의 단점은 무엇인가요?

더보기

A. 만약 다른 프로세스/쓰레드가 Lock을 소유하고 있다면 Lock이 반납되었는지 확인하기 위해 무한 대기하게 됩니다.
이렇게 되면 CPU 자원을 계속 사용해야하기 때문에 자원의 낭비가 될 수 있습니다.

Q. 만약 3개의 프로세스까지는 공유 자원에 접근 가능하도록 하려면 어떻게 해야하나요?

더보기

A. 접근 가능한 프로세스/쓰레드 수를 특정 변수로 관리하는 세마포어 기법을 사용할 수 있습니다. 
프로세스/쓰레드가 자원에 접근할 때 마다 값을 1 감소시킵니다.

만약 접근 가능한 프로세스 수가 0이라면 접근이 가능할 때 까지 대기상태가 됩니다.
만약 프로세스/쓰레드가 자원을 다 사용하였다면 값을 1 증가 시켜 대기 상태에 있는 프로세스/쓰레드가 자원을 사용할 수
있도록 합니다.

Q. 세마포어의 또 다른 활용은 무엇이 있나요?

더보기

A. 실행 순서를 보장할 수 있습니다. 프로세스 A 이후에 프로세스 B가 실행되어야 한다면
세마포어의 변수 값을 0으로 지정 한 뒤 프로세스 A를 실행한 후 세마포어 변수의 값을 1로 만들어줍니다.
이후 프로세스 B는 세마포어가 1인 것을 확인하고 실행이 됩니다. 만약 프로세스 B가 먼저 실행이 되려고해도
세마포어 변수의 값이 1이 되기전까진 대기해야하기 때문에 실행 순서가 보장됩니다.

Q. 모니터는 무엇인가요?

더보기

A. 

Q. 교착 상태는 무엇이고 발생하는 이유는 무엇인가요?

더보기

A. 2개 이상의 프로세스/쓰레드가 특정 자원을 획득하기 위해 무한히 대기하는 것을 의미합니다.

일반적으로 특정 자원을 소유한 채 또 다른 자원을 획득하는 상황에서 발생하며
예를 들어 A 자원을 소유하고 있는 프로세스1이 B자원을 소유하려고 대기중이고
B자원을 소유하고 있는 프로세스2가 A자원을 소유하려고 하면 두 프로세스는 원하는 자원을 절대 얻을 수 없게 됩니다.

상호배제 : 자원에는 하나의 프로세스/쓰레드만 접근 가능
점유와 대기 : 하나의 자원을 점유하면서 또 다른 자원을 얻기 위해 대기

비선점 : 다른 프로세스의 자원을 뺏지 못함

원형 대기 : 원형의 형태로 서로 자원을 대기하고 있음

Q. 교착상태를 해결하기 방법은 어떤 것이 있나요?

더보기

A. 교착 상태가 발생하는 4가지 중 1가지를 제거하는 방법, 현재 사용중인 자원 상태와 할당 가능한 자원 상태를 확인하여
교착 상태가 발생하지 않을 것이라고 판단되면 할당하는 방법, 교착 상태가 발생하였을 때 추적한 후 원인을 분석한 뒤
교착 상태에 빠진 프로세스를 종료하는 방법이 있습니다.

Q. 메모리 할당 방식에서 고정 길이 할당 방식과 가변 길이 할당 방식은 무엇인지 그리고 차이에 대해서 말해주세요.

더보기

A. 고정 길이 할당 방식은 메모리를 일정한 크기의 공간으로 나눈 후 할당하는 방식입니다.
가변 길이 할당 방식은 메모리를 각 프로세스의 크기 혹은 논리적인 영역의 크기만큼 공간을 만들어 할당하는 방식입니다.
고정 길이 할당 방식의 경우 나누어진 공간이 필요한 공간보다 큰 내부 단편화가 발생할 수 있으며
가변 길이 할당 방식은 할당 된 메모리를 해제하고 난 후 새로운 프로세스에게 메모리를 할당 해줄 때 남은 메모리 공간은 충분하지만
남은 공간들이 서로 떨어져있어 사용하지 못하는 외부 단편화가 발생할 수 있습니다.

Q. 가상 메모리는 무엇인가요?

더보기

A. 프로그램과 관련 된 데이터를 전부 메모리에 적재하지 않고 필요한 부분만 적재하고 나머지 데이터들은 보조 기억 장치에
보관하여 필요할 때 스왑하는 방식입니다. 이러한 방식으로 실제 물리 메모리 용량보다 큰 프로그램을 실행할 수 있습니다.

Q. 가상 메모리 관리 방법에는 무엇이 있나요?

더보기

A. 가상 메모리 관리 방법에는 세그멘테이션 기법과 페이징 기법이 있습니다.

Q. 세그멘테이션 기법은 무엇인가요?

더보기

A. 프로세스를 코드 영역, 데이터 영역, 힙 영역, 스택 영역처럼 논리적인 영역으로 나누고 각 영역의 크기만큼 메모리에 비연속적으로 할당하는 방법입니다. 

Q. 페이징 기법은 무엇인가요?

더보기

A. 프로세스와 메모리를 동일한 크기로 나누고 나누어진 프로세스 조각을 나누어진 메모리 공간에 비연속적으로 할당하는
방법입니다.

Q. 페이징 기법에서 프레임 할당은 무엇인가요?

더보기

A. 프레임 할당이란 것은 프로세스가 사용할 프레임 수를 정하는 것입니다.
만약 프로세스가 너무 적은 프레임 수를 사용한다면 페이지 폴트가 자주 발생하여 CPU 작업 처리 시간보다 스왑 하는 시간의
오버헤드가 더 길게 작용하는 스래싱 현상이 발생할 수 있습니다.

Q. 페이징 기법에서 실제 메모리에 존재하는 데이터에 접근하는 과정을 설명해주세요.

더보기

A. 만약 변환하고자 하는 논리 주소의 물리 주소 값이 TLB 캐시에 존재한다면 해당 값을 사용하여 데이터에 접근합니다.
존재하지 않다면 페이지 테이블에 접근하여 논리 주소를 물리 주소로 변환하여 데이터에 접근합니다.

만약 실제 물리 주소에 데이터가 존재하지 않다면 페이지 폴트가 발생하고 스왑 영역에서 실제 데이터를 적재하게 됩니다.

Q. 물리 메모리를 전부 사용 중인데 새로운 데이터를 적재해야한다면 페이징 기법에서는 어떻게 처리 되나요?

더보기

A. 페이징 교체 알고리즘을 통해 메모리에서 빼낼 페이지를 선택하여 스왑 영역으로 보내고 새로운 데이터를 페이지 공간에
적재합니다. 다양한 알고리즘이 있으며 LRU 알고리즘의 경우 오랫동안 사용되지 않은 페이지를 스왑 영역으로 보냅니다.

Q. 논리주소와 물리 주소는 무엇인가요?

더보기

A. 논리 주소는 CPU가 작업을 처리하기 위해 사용하는 주소로 각 프로세스마다 독립적으로 0부터 사용하는 주소이며
물리 주소는 실제 프로그램의 데이터가 적재 된 물리 메모리의 위치를 나타내는 주소를 의미합니다.