💡 프로세스와 스레드의 차이에 대해 설명해주세요.
프로세스는 실행중인 프로그램으로 독립적인 메모리 공간을 가지기 때문에 다른 프로세스와 공유하지 않습니다. 또, 최소한 1개의 스레드를 가집니다.
스레드는 프로세스 내에 존재하며, 프로세스가 할당받은 자원을 사용합니다. 스택영역만을 따로 할당받고, 그 이외의 영역들은 공유하기 때문에 다른 스레드의 결과를 즉시 가져와 확인할 수 있습니다.
💡 멀티 프로세스와 멀티 스레드의 특징에 대해 설명해주세요.
멀티 프로세스는 한 프로세스가 죽어도 다른 프로세스에게 영향을 미치지 않아 작업을 계속 수행한다는 장점이 있지만, 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.
멀티 스레드는 멀티 프로세스보다 적은 메모리 공간과 컨텍스트 스위칭이 빠르다는 장점이 있지만, 한 스레드에 문제가 생기면 다른 스레드에 영향을 미치고, 동기화의 문제도 발생할 수 있는 단점이 있습니다.
💡 멀티 쓰레드의 동시성과 병렬성을 설명해주세요.
동시성이란 멀티 작업을 위해 싱글 코어에서 여러개의 스레드를 번갈아 가며 실행하는 것을 의미합니다.
병렬성이란 멀티 작업을 위해 하나 이상의 스레드를 포함하는 각 코어들을 동시에 실행하는 것을 의미합니다.
💡 멀티 쓰레드 환경에서의 주의사항을 설명해주세요.
공유 데이터에 동시에 접근하는 경우 교착상태나 동기화 문제가 생기지 않도록 주의해야 합니다.
💡 데드락에 대해 설명해주세요.
교착상태이며, 두 개 이상의 프로세스가 공유 자원을 점유하고 있는 상태에서 다른 자원의 접근 권한을 요청하여 권한을 할당 받을 때까지 무한정 기다리게 되는 상태를 의미합니다.
데드락의 조건으로는 4가지가 있습니다.
💡 콘보이 현상(convoy effect)이란 무엇이고, 콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인지 설명해주세요.
작업 시간이 긴 프로세스가 먼저 큐에 도착하여 다른 프로세스들의 작업 시간이 모두 늦춰져 효율이 떨어지는 현상을 의미합니다.
FCFS 스케줄링 알고리즘에서 콘보이 현상이 발생할 수 있습니다.
FCFS는 비선점형 알고리즘으로, 큐에 먼저 도착하는 프로세스부터 차례대로 작업을 수행하게 하는 스케줄링 알고리즘입니다.
💡 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.
선점형 스케줄링은 다른 프로세스 대신에 CPU를 차지할 수 있는 것을 의미하고, 비선점형 스케줄링은 CPU를 차지하고 있는 프로세스가 작업을 끝낼때까지 다른 프로세스에서 CPU를 사용할 수 없는 것을 의미합니다.
💡 동기와 비동기의 차이에 대해 설명해주세요.
동기는 순차적으로 작업을 수행하고, 비동기는 병렬적으로 수행합니다.
서버에서 데이터를 가져와 화면에 표시하는 작업을 예로 들어본다면,
동기 방식은 서버에 데이터를 요청하고 응답을 받을 때까지 이후 작업들을 잠시 중단하게 됩니다.
반면에, 비동기 방식은 서버에 데이터를 요청하고 응답을 받을 때까지 기다리지 않고 바로 다음 작업을 수행하게 됩니다.
💡 Critical Section(임계영역)에 대해 설명해주세요.
공유 자원에 동시에 접근하는 경우가 없도록 보장해줘야 하는 영역입니다.
임계 구역의 조건으로 3가지가 있습니다.
💡 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이에 대해 설명해주세요.
뮤텍스는 공유 자원에 한 번에 한 프로세만 접근할 수 있도록 임계구역에 들어갈 때 락을 걸고 나올 때 해제하는 방법입니다.
세마포어는 세마포어 변수만큼의 프로세스가 공유 자원에 동시에 접근할 수 있는 방식입니다. 락을 걸었던 프로세스가 아니더라도 락을 해제할 수 있습니다.
이진 세마포어는 세마포어의 변수가 0 또는 1의 값만을 가지는 세마포어로 뮤텍스라고 할 수 있습니다.
💡 컨텍스트 스위칭(Context Switching)이 무엇인지 설명해주세요.
CPU가 한 프로세스를 실행하고 있을 때 인터럽트 요청에 의해서 다음 우선순위에 있는 프로세스를 실행하기 위해 현재 실행중인 프로세스의 상태나 레지스터 값을 저장하고, 다음 실행시킬 프로세스의 컨텍스트로 교체하는 과정을 의미합니다.
컨텍스란 CPU가 프로세스를 실행하기 위해 필요한 프로세스의 정보들입니다.
💡 페이지 교체 알고리즘에 대해 설명해주세요.
필요한 페이지가 주기억장치에 적재되지 않았을 때 어떤 페이지를 선택해 교체할지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
FIFO: 가장 먼저 적재된 페이지를 선택해 교체하는 방법입니다. 구현이 간단하다는 장점이 있습니다.
OPT: 최적 페이지 교체 알고리즘으로, 앞으로 오랫동안 사용하지 않을 페이지를 선택해 교체하는 방법입니다. 운영체제가 앞으로 사용될 페이지를 미리 알 수 있어야 하기 때문에 구현이 불가능하여, 연구의 목적으로 사용됩니다.
LRU: 가장 오랫동안 사용되지 않은 페이지를 선택하는 방법입니다. OPT와 비슷한 효과를 낼 수 있습니다. OPT 알고리즘 보다는 페이지 교체 수가 많지만 FIFO 알고리즘 보다는 적습니다.
LFU: 가장 적게 참조된 페이지를 선택하는 방법입니다.
MFU: 가장 많이 참조된 페이지를 선택하는 방법입니다.
💡 페이징
프로세스를 고정 크기로 분할하여 메모리에 저장하는 방식입니다.
💡 세그먼트
프로세스를 서로 다른 크기를 가진 논리적인 블록 단위인 세그먼트로 분할하여 메모리에 저장하는 방식입니다.
💡 가상 메모리 기법
프로세스 전체를 메모리에 올리지 않아도 실행 가능하도록 하는 기법입니다. 프로그램이 물리적 메모리보다 커져도 실행 가능할 수 있게 해줍니다. 프로세스에서 사용하는 부분만 메모리에 올리고, 나머지는 디스크에 보관하는 방식입니다.
💡 운영체제
시스템의 자원과 동작을 관리하는 소프트웨어입니다. 프로세스, 저장장치, 네트워킹, 사용자, 하드웨어 등을 관리합니다.
💡 메모리 구조
메모리에는 크게 네가지 종류가 있습니다. Code, Data, Heap, Stack이 있습니다. Code는 소스코드가 들어가는 부분이고, Data는 전역변수, 정적변수가 할당되는 부분입니다. 그리고 Heap은 데이터가 동적으로 할당되는 공간이고, Stack은 함수의 호출정보, 지역변수, 매개변수들이 저장되게 됩니다.
💡 CPU 스케줄러
대기큐에 있는 프로세스에 CPU를 할당하는 방법입니다. 크게 다섯가지가 있는데, FCFS, SJF, SRT, Priority Scheduling, 그리고 Round Robin이 있습니다.
비선점 스케줄링
FCFS: 먼저 CPU를 요청하는 프로세스부터 처리하는 방식
SJF(Shortest Job First): Burst time(CPU 사용시간)이 짧은 프로세스부터 CPU를 할당하는 방식
선점 스케줄링
SRT(Shortest Remaining Time): 남은 시간이 짧은 프로세스에게 CPU를 할당하는 방식
RR(Round Robin): 타임 퀀텀(타임 슬라이스)만큼씩 돌아가면서 CPU를 할당하는 방식
타임 퀀텀이 너무 길어지면 FCFS 스케줄링과 같아지고, 너무 짧아지면 컨텍스트 스위칭이 많이 일어나 비용이 증가하게 됩니다. 적당한 타임 퀀텀 설정이 중요합니다.
Priority Scheduling(우선 순위 스케줄링): 우선순위가 높은 프로세스에게 CPU를 먼저 할당하는 방식