📌 1. 프로세스와 스레드의 차이점에 대해 설명하시오.
- 프로세스는 운영체제에 의해서 자원을 할당 받는 단위
- 스레드는 할당받은 자원을 사용하는 단위
- 스레드는 프로세스 안에 여러개가 존재할 수 있음
📌 2. Race Condition에 대해 설명하시오.
- 여러개의 프로세스나 스레드가 하나의 자원을 사용하려고 하는 상황
- race contion이 일어나는 곳을 임계 영역이라고 함
- 임계 역역은 상호배제, 진행, 한정 대기의 조건을 만족시키면 해결할 수 있음
- 상호 배제 : 하나의 자원은 하나의 프로세스만 사용하게 함
- 진행 : 임계 영역을 사용 중인 프로세스가 없다면 누구나 사용 가능
- 한정 대기 : 상호 배제에 의해서 기다리고 있는 프로세스가 무한 대기를 하면 안 됨
📌 3. 메모리가 부족하면 OS 가 어떤일을 할까?
swap
- 하드 디스크의 일부를 메모리로 사용할 수 있게하는 SWAP 현상이 발생한다.
- 메모리가 부족하면 메모리에 적재된 프로그램 중 지금 당장 필요하지 않은 프로그램 데이터를 하드 디스크에 옮겨 공간을 확보한다.
- RAM에 접근하는 것보다 속도가 느리다.
- 스와핑(swapping): RAM이 부족할 때 하드디스크 공간으로 이용하고 메모리가 다시 여유가 생겨 사용 가능 해지면 하드디스크에서 메모리로 옮겨오는 것
OOM Killer
- SWAP할 영역이 부족할 때 실행
- 커널은 적절한 프로세스를 찾아 강제 종료(kill)한다 = OOM Killer
- 스와핑 기법을 통해 공간을 바꿔치기하는 방법과 달리 사용자에게 들킬 가능성이 높음
📌 4. 교착상태(데드락, Deadlock)이 발생하기위한 조건과 해결책
발생 조건
- 상호배제 : 한 번에 한 프로세스가 자원을 사용
- 점유대기 : 하나의 자원을 점유하면서 다른 프로세스가 점유 중인 자원을 대기
- 비선점 : 다른 프로세스에 할당된 자원을 빼앗아 올 수 없음
- 순환대기 : 대기 프로세스 집합이 순환 형태로 자원을 대기함
탈출 조건
-
예방
- 상호 배제 조건 방지 : 여러 프로세스가 한 번에 공유 자원 사용
- 점유 대기 조건 방지 : 필요한 자원을 한 번에 요구하고 허용할 때까지 작업 보류, 나중에 다른 자원을 점유하기 위한 대기 방지
- 비선점 조건 방지 : 다른 프로세스에 할당된 자원이 선점권이 없으면 높은 우선순위의 프로세스가 자원을 선점함
- 순환 대기 조건 방지 : 한 쪽 방향으로만 자원을 요구함
-
회피
- 자원 할당 후에도 시스템이 항상 안정 상태에 있도록 할당
- 안정 상태 : 프로세스들이 요청하는 자원을 데드락 없이 순차적으로 할당 가능
- 안정 순서 : 프로세스들에게 자원 할당, 실행, 종료 등의 작업 시 데드락이 발생하지 않는 순서
- 은행원 알고리즘 : 자원 할당 후에도 안정 상태인지 사전에 점검하여 교착 상태를 회피하는 것
-
탐지 및 회복
- 탐지
- 시스템의 자원 할당 상태를 가지고 데드락 발생 여부 파악
- 회복
- 프로세스를 1개 이상 중단
- 교착상태에 속한 모든 프로세스 중단 : 중간 연산 값이 사라질 위험이 있음
- 교착상태가 해결될 때까지 한 프로세스씩 중단하고 탐지 & 회복 : 매번 탐지와 회복 알고리즘을 호출하고 수행해 부담이 될 수 있음
- 자원 선점 : 프로세스에 할당된 자원을 선점해서 교착 상태를 해결할 때까지 다른 프로세스에 자원을 할당
📌 5. CPU 스케쥴링의 종류
비선점
프로세스 종료나 입출력등의 이벤트가 있을 때까지 실행 보장
- 선입선처리 스케줄링 : 준비 큐에 도착한 순서대로 CPU 할당
- 최단 작업 우선 스케줄링 : 가장 짧은 작업 단위부터 CPU 할당
- HRN : 우선순위를 계산해 CPU 할당
- 우선순위 = (대기시간 + 실행시간) / 실행시간
선점
OS가 cpu의 사용권을 선점할 수 있는 경우 강제로 회수
-
우선순위 스케줄링
- 정적 혹은 동적으로 우선순위를 부여해서 CPU 할당
- 우선순위가 낮은 작업이 무한정 기다리는 기아상태가 발생할 수 있지만 시간이 오래된 작업의 우선순위를 높여주는 에이징 기법을 통해 해결
- 선점과 비선점 알고리즘에 모두 적용 가능
-
라운드 로빈 스케줄링
- 각 작업을 동일 한 타임퀀텀으로 나눠서 각각의 작업을 돌아가며 실행
-
다단계 큐
- 준비 큐를 여러개로 나눔
- 큐마다 타임퀀텀을 설정
- 우선순위가 높은 큐는 작은 타임퀀텀 우선순위가 낮은 큐는 높은 타임퀀텀
-
다단계 피드백 큐
- 다단계 큐에서 자신한테 할당된 타임퀀텀을 모두 사용하면 다음 큐로 내려가는 방식
📌 6. race condition(경쟁상태)를 방지하기 위한 조건
- 경쟁 상태를 해결하기 위해서는 상호배제, 진행, 한정대기 상태를 만족해야 함
- 상호배제 : 하나의 자원에는 하나만 접근 가능
- 진행 : 임계 영역이 접근 가능하면 다른
- 한정 대기 : 임계 영역에 접근하기 위해서 무한정으로 대기하는 작업이 존재해서는 안 됨
📌 7. 프로세스에 할당되는 메모리의 각 영역에 대해서 설명해 주세요.
- code, data, heap, stack 영역이 있다.
- code: 사용자가 작성한 함수 부분
- data: 프로그램이 사용하는 데이터 부분으로 전역 변수가 저장됨
- heap: 개발자가 필요할 때 사용하는 부분
- stack: 함수 수행을 마치고 다시 돌아갈 공간의 주소와 데이터가 저장됨
📌 8. 메모리 구조의 순서가 어떻게 되는가? CPU에서 가까운 순으로 말해보시오.
레지스터 -> 캐시메모리 -> 주기억장치 -> 보조기억장치 -> 외부 기억장치
cpu에서 멀어질 수록 데이터 저장 용량 ⬆️ 접근 속도 ⬇️
- 레지스터: cpu 요청 처리 데이터 저장, 연산 처리
- 캐시: 주기억장치 접근 속도와 cpu 처리속도 차를 줄이기 위한 용도, 자주 사용하는 데이터 등록
- 주기억장치: 현재 cpu가 하고 있는 일
- 보조기억장치: hdd, ssd
📌 9. Cache Memory의 역할은 무엇인가
- cpu의 처리 속도와 주기억장치에 접근해 데이터를 가져오는 속도의 차를 줄이기 위해 사용
- 자주 사용하는 데이터를 미리 캐시에 저장해 주기억 장치에 접근하지 않고 캐시에서 빠르게 가져올 수 있음
- cpu는 캐시를 먼저 확인하고 캐시에 없으면 그때 주기억장치에 접근해 데이터를 가져옴
캐시 미스
- cold miss : 처음 부르는 메모리 주소에서의 miss
- conflict miss : 같은 주소에 다른 데이터가 할당되어 있을 때의 miss
- capacity miss : 공간 부족 miss
📌 10. Caching Locality와 Cache Hit Ratio에 대해 설명하시오
Caching Locality = 캐시의 지역성
- 데이터에 대한 접근이 시간적 혹은 공간적으로 인접한 곳에서 발생하는 것
- 시간 지역성 : 최근 사용한 데이터 재참조
- 공간 지역성 : 최근 사용한 데이터 주소와 인접한 곳에 있는 데이터 참조
Cache Hit Ratio = 적중률
- 적중횟수 / 총 접근 횟수
- 캐시 기억장치가 있는 컴퓨터의 성능 척도
- 적중률이 높을 수록 cpu와 주기억장치의 속도 차이에 의한 병목현상을 줄일 수 있고 이는 캐시의 지역성에 의해 높아짐
📌 11. 운영체제란?
- 사용자와 하드웨어간의 인터페이스로 동작하는 시스템 소프트웨어
- cpu 스케줄링, 메모리 관리, 파일 관리 등의 기능 제공
- 사용자와 시스템 간의 편리한 인터페이스 제공 (gui, cli)
📌 12. 멀티 프로세스와 멀티 스레드의 차이점
멀티 프로세스
- 여러 개의 프로세스가 하나의 문제를 병렬적으로 처리하는 것
- 함께 처리 중인 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향이 없음
- 작업량이 많으면 오버헤드로 인한 성능 저하가 발생
멀티 스레드
- 한 프로세스 안에서 자원을 공유하며 여러 개의 스레드가 작업을 나누어 수행하는 것
- 자원을 공유하기 때문에 병목현상이나 데드락이 발생할 수 있음
- 하나의 스레드에 문제가 생기면 다른 스레드에도 문제가 발생
📌 13. First Fit, Best Fit, Worst Fit
프로세스를 메모리 어디에 할당할지 결정하는 방식 3가지
- First Fit : 할당할 수 있는 곳에서 가장 처음에 있는 곳에 할당
- Best Fit : 남는 공간이 가장 적은 곳에 할당
- Worst Fit : 남는 공간이 가장 많은 곳에 할당
📌 14. 외부단편화와 내부단편화란?
외부단편화
- 50짜리 2개의 공간이 있다고 가정했을 때 메모리는 총 100만큼의 크기가 남아있음
- 그러나 70짜리 작업이 들어오면 작업의 크기가 총 남아있는 메모리보다 작지만 메모리에 할당할 수 없음
- 즉, 작업의 크기보다 남아있는 메모리의 크기가 더 크지만 일을 할당할 수 없는 경우를 외부 단편화라고 함
내부단편화
- 50 크기의 빈 메모리 공간에 30 짜리의 일을 할당한다면 20 만큼이 남게 됨
- 이 공간은 너무 작아 다른 작업들이 사용할 수 없게 되고 이렇게 작게 남은 빈 공간을 내부단편화라고 함
📌 15. 페이징과 세그멘테이션이란?
페이징과 세그멘테이션의 공통점
- 단편화 문제를 해결하기 위해 프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
- 불연속 메모리 관리
페이징 - 물리적 분할
- 프로세스를 같은 크기(페이지)로 분할해서 메모리에 할당하는 방법
- 페이지: 가상 메모리 안에서 같은 사이즈를 가진 프로세스 조각
- 프레임: 페이지 크기와 같은 주 기억 장치의 메모리 조각
- 외부 단편화 해소
세그멘테이션 - 논리적 분할
- 논리적 단위인 세그먼트로 분할해서 메모리에 할당하는 방법
- 논리적인 내용을 기준으로 분할하기 때문에 크기가 같지 않음
- 내부 단편화 해소
GITHUB에서 모아보기