[면접대비] 운영체제
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
운영체제는 하드웨어와 응용 프로그램 사이에서 시스템 자원을 관리하는 소프트웨어입니다
CPU, 메모리, 파일, 입출력 장치 등의 자원을 관리하고 프로그램이 안전하고 효율적으로 실행될 수 있는 환경을 제공합니다.
커널은 하드웨어와 시스템 자원을 직접 관리하는 프로그램입니다. 프로세스 관리, 메모리 관리, 파일 시스템, 장치 제어 등의 기능을 담당합니다.
커널 모드는 모든 시스템과 명령에 접근할 수 있는 권한을 가지며
사용자 모드는 접근 권한이 제한됩니다
일반 프로그램은 사용자 모드에서 실행되고 시스템 자원이 필요하면 시스템 콜을 통해 커널의 기능을 요청합니다
사용자 프로그램이 운영체제의 커널 기능을 요청하기 위한 인터페이스입니다
파일 입출력, 프로세스 생성, 메모리 할당 등의 작업이 필요할 때 시스템 콜을 통해 커널에 요청합니다
CPU가 현재 작업을 잠시 중단하고 특정 사건을 우선 처리하도록 알리는 신호입니다
키보드 입력이나 I/O 완료 등의 인터럽트가 발생하면 CPU는 해당 인터럽트 처리 루틴을 실행한 뒤 기존 작업으로 돌아갑니다
프로세스는 실행 중인 프로그램입니다
프로그램 코드뿐만 아니라 메모리 공간, CPU 상태, 연린 파일 등의 실행에 필요한 자원을가지고 있습니다
프로그램은 디스크에 저장된 실행 가능한 정적인 코드이고, 프로세스는 해당 프로그램이 메모리에 올라와 실제로 실행되고 있는 상태입니다
프로세스는 독립적인 메모리 공간과 자원을 가지는 실행 단위이고, 스레드는 프로세스 내부에서 실행되는 작업의 단위입니다. 같은 프로세스의 스레드들은 Code, Data, Heap 등을 공유하지만 각각 별도의 Stack을 가집니다
Code 영역에는 실행할 명령어, Data 영역에는 전역, 정적 변수, Heap영역에는 동적으로 할당된 데이터가 저장됩니다. Stack영역에는 함수 호출 정보, 매개변수, 지역 변수 등이 저장됩니다
Data 영역에서는 초기화된 변수가 저장되는 Data영역과 초기화되지 않은 변수가 저장되는 BSS 영역으로 나눌 수 있습니다
PCB는 운영체제가 각 프로세스를 관리하기 위해 필요한 정보를 저장하는 자료구조입니다
프로세스 ID, 상태, PC, CPU 레지스터, 스케줄링 정보 등이 저장됩니다
CPU가 실행중인 프로세스나 스레드를 변경하면서 현재 실행 상태를 저장하고 다음 실행 상태를 복원하는 과정입니다. 이 과정에서 레지스터 등의 상태를 저장, 복원하고 캐시 효율이 떨어질 수 있기 때문에 비용이 발생합니다
서로 독립된 프로세스끼리 데이터를 주고 받거나 통신하기 위한 방법입니다
프로세스 내부에서 실제로 작업을 수행하는 실행 단위입니다
하나의 프로세스는 여러 스레드를 가질 수 있으며 같은 프로세스의 자원을 공유하면서 각각 독립적인 실행 흐름을 가집니다
같은 프로세스의 스레드는 Code, Data, Heap 영역을 공유합니다
함수 호출과 지역 변수 등을 관리해야하므로 Stack은 각 스레드가 독립적으로 가집니다
멀티 프로세스는 각각 독립된 메모리 공간을 사용해 안정성이 높지만 통신과 Context Switching 비용이 상대적으로 큽니다.
멀티 스레드는 메모리를 공유해 통신이 빠르고 가볍지만, 공유 데이터에 대한 동기화 문제가 발생할 수 있습니다
여러 작업을 동시에 처리할 수 있어 CPU 활용도와 응답성을 높일 수 있고, 같은 프로세스의 메모리를 공유하기 때문에 데이터 교환도 효율적입니다
하지만 공유 데이터에 접근하면서 Race Condition이나 Deadlock 같은 동기화 문제가 발생할 수 있습니다
동시성은 여러 작업이 번갈아 실행되면서 동시에 진행되는 것처럼 처리되는 것이고 병렬성은 여러 작업이 실제로 같은 시간에 실행되는 것 입니다
여러 스레드가 공유 데이터에 동시에 접근하여 실행 순서에 따라 결과가 달라지는 문제입니다
Mutext나 Lock등을 사용해 임계 영역에 한 번에 하나의 스레드만 접근하도록 하여 방지할 수 있습니다
임계 영역은 여러 스레드가 동시에 접근하면 문제가 발생할 수 있는 공유 자원에 대한 코드 영역입니다
공유 자원에 한 번에 하나의 스레드만 접근하도록 하는 동기화 기법입니다. 한 스레드가 Mutex를 획득하면 다른 스레드는 해당 Mutext가 해제될 때까지 접근할 수 없습니다
동시에 공유 자원에 접근할 수 있는 스레드의 수를 제한하는 동기화 기법입니다
내부 카운터를 이용해 여러 스레드의 접근을 일정 개수까지 허용할 수 있습니다
Mutext는 기본적으로 하나의 스레드만 임계 영역에 접근하도록 하는 상호 배제에 사용됩니다
Semaphore는 카운터를 이용하여 지정된 개수의 스레드가 동시에 자원에 접근할 수 있도록 제어할 수 있습니다
여러 프로세스나 스레드가 서로 상대방이 가진 자원을 기다리면서 무한히 대기하는 상태입니다
서로 필요한 Lock을 하나씩 가지고 상대방의 Lock 해제를 기다리는 경우가 대표적인 예 입니다
Deadlock은 하나의 자원을 한 번에 하나만 사용해야하는 상호배제, 자원을 가진 상태에서 다른 자원을 기다리는 점유와 대기, 다른 작업의 자원을 강제로 빼앗을 수 없는 비선점, 서로가 가진 자원을 순환 형태로 기다리는 순환 대기를 모두 만족할 때 발생할 수 있습니다.
Deadlock은 여러 작업이 서로의 자원을 기다리면서 모두 진행하지 못하는 상태이고
Starvation은 다른 작업들이 계속 우선적으로 실행되어 특정 작업만 오랫동안 자원을 얻지 못하는 상태입니다
CPU 스케줄링은 실행 가능한 프로세스 중 어떤 프로세스에 CPU를 할당할지 결정하는 것 입니다
선점형은 실행중인 프로세스에서 CPU를 강제로 회수할 수 있지만, 비선점형은 프로세스가 종료되거나 대기 상태가 될 때까지 CPU를 사용합니다
Paging은 가상 메모리를 일정 크기의 Page, 물리 메모리를 같은 크기의 Frame으로 나누어 관리하는 방식입니다. Page Table을 이용하여 각 Page가 어떤 Frame에 위치하는지 매핑합니다
가상 메모리는 각 프로세스에 독립적인 가상 주소 공간을 제공하고 이를 실제 물리 메모리에 매핑하는 메모리 관리 기법입니다. 프로세스 간 메모리를 보호하고 필요한 부분만 물리 메모리에 올려 메모리를 효율적으로 사용할 수 있습니다
Page Fault는 프로세스가 접근한 페이지가 현재 물리 메모리에 존재하지 않을 때 발생하는 예외입니다. 운영체제는 필요한 페이지를 디스크에서 메모리로 가져온 뒤 Page Table을 갱신하고 중단된 명령을 다시 수행합니다
메모리 단편화는 메모리의 일부 공간이 효율적으로 사용되지 못하고 낭비되는 현상입니다
내부 단편화는 할당된 영역 내부에 남는 공간이고, 외부 단편화는 사용 가능한 공간이 여러 곳에 흩어져 큰 연속 공간을 확보하지 못하는 현상입니다.
FCFS는 먼저 도착한 프로세스부터 실행하고, SJF는 실행 시간이 가장 짧은 프로세스부터 실행합니다
Round Robin은 각 프로세스에 일정한 시간을 할당하고 순서대로 CPU를 사용하게 하는 선점형 스케줄링 방식입니다
Time Quantum이 너무 크면 FCFS와 비슷하게 동작하여 응답성이 떨어질 수 있습니다
반대로 너무 작으면 Context Switching이 지나치게 자주 발생하여 오버헤드가 증가합니다
FIFO는 가장 먼저 들어온 페이지, LRU는 가장 오랫동안 사용되지 않은 페이지, Optimal은 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체합니다. Optimal은 이론적으로 가장 효율적이지만 미래의 메모리 접근을 알아야하기 때문에 실제 구현에는 사용할 수 없습니다
Thrashing은 Page Fault가 지나치게 자주 발생하여 실제 작업보다 페이지를 교체하는 데 대부분의 시간을 사용하는 현상입니다. 실행 중인 프로세스들이 필요로 하는 페이지에 비해 물리 메모리가 부족할 때 주로 발생합니다.
운영체제 면접 대비
객체지향 면접대비
그래픽스 면접 대비