CPU 스케줄링
데드락(DeadLock)
Race Condition
세마포어(Semaphore) & 뮤텍스(Mutex)
페이징 & 세그먼테이션
페이지 교체 알고리즘
메모리(Memory)
파일 시스템
Q. CPU 스케줄링 알고리즘 중에서 비선점형 스케줄링에 대해 설명해주세요
CPU 의 이용률을 극대화하기 위해서 멀티 프로그래밍을 해야 한다. 언제 어떤 프로세스에 CPU 자원을 할당할지 결정하는 것이 CPU 스케줄링이다.
비선점형 스케줄링이란 한 프로세스가 CPU 를 점유하고 있다면 다른 프로세스가 CPU 자원을 빼앗을 수 없는 방식이다. 따라서 필요한 문맥 교환만 발생하여 오버헤드가 상대적으로 적지만 프로세스가 어떻게 배치되는 지에 따라서 효율성이 많이 차이날 수 있다.
비선점형 스케줄링의 종류
FCFS (First Come First Served) 스케줄링 : 가장 먼저 자원을 요청한 프로세스에게 CPU 자원을 할당해주는 방식이다.
- 단점 : 평균 대기 시간, 응답 시간이 길어질 수 있다.
- 장점 : 스케줄링 방식 구현이 간단하다. 반환 시간은 좋을 수 있다.
SJF (Shortest Job First) 스케줄링: CPU Burst time 의 길이를 고려하여 가장 시간이 짧은 작업부터 실행하는 알고리즘이다.
- 장점 : 평균 대기 시간이 가장 짧다
- 단점 : 긴 실행시간을 가진 프로세스사 실행되지 않는 기아 현상이 발생할 수 있다.
Priority (우선순위) 스케줄링 : 기존의 SJF 스케줄링의 경우 긴 시간을 가진 프로세스가 실행되지 않을 수도 있다. 즉 기아 현생이 발생할 수 있다. 따라서 이러한 단점을 보완하기 위하여 오래된 작업일 수록 우선순위를 높이는 방법을 사용하여 보완한 알고리즘이다.
Q. SJF 스케줄링에 대해 설명해주세요. 그리고 SJF 스케줄링이 가진 단점을 보완하기 위해서는 어떻게 해야할까요 ?
SJF (Shortest Job First) 스케줄링: CPU Burst time 의 길이를 고려하여 가장 시간이 짧은 작업부터 실행하는 알고리즘이다. 평균 대기 시간이 가장 짧다는 장점이 있지만, 긴 실행시간을 가진 프로세스사 실행되지 않는 기아 현상이 발생할 수 있다는 단점이 있다. 이를 보완하기 위해서 Priority (우선순위) 스케줄링이 등장했다. 기존의 SJF 스케줄링의 경우 긴 시간을 가진 프로세스가 실행되지 않을 수도 있다. 즉 기아 현생이 발생할 수 있다. 따라서 이러한 단점을 보완하기 위하여 오래된 작업일 수록 우선순위를 높이는 방법을 사용하여 보완한 알고리즘이다.
Q. CPU 스케줄링 알고리즘 중에서 선점형 스케줄링에 대해 설명해주세요.
프로세스가 CPU 를 점유하여 작업을 수행중인 상태에서 운영체제가 이를 강제로 선점할 수 있는 방법이다. CPU 처리 시간이 긴 프로세스의 작업을 빼앗을 수 있으므로, 효율적으로 CPU 자원을 운영할 수 있다. 반면 비선점형 스케줄링 방식에 비해서 잦은 문맥 교환이 일어나므로 오버헤드가 발생할 수 있다.
Round Robin 방식
현대 OS에서 사용하는 스케줄링 방식이다. 각 프로세스마다 동일한 시간이 할당되며, 시간 안에 작업이 완료되지 않으면 다음 프로세스에게 CPU 자원이 할당되며, 프로세스는 다시 ready queue의 끝으로 돌아가서 대기한다.
할당 시간이 너무 크게 되면 FCFS와 유사하게 되고, 너무 짧으면 컨텍스트 스위칭이 과도하게 많이 일어나므로 오버헤드가 커질 것이다.
SRF (Shortest Remaining Time First)
SJF 는 작업 실행 중간에 남은 시간이 더 짧은 프로세스가 들어와도 계속 작업을 처리하는데 SRF는 작업을 중단하고 더 짧은 프로세스를 처리하는 방식이다.
다단계 큐
우선 순위에 따라서 큐를 여러개 준비한다. 그리고 큐마다 각각 다른 알고리즘 (RR, SJF, FCFS,..)을 적용하여 운영한다. 하지만 큐 간의 프로세스 이동이 불가능하므로 유연성이 떨어진다.
다단계 피드백 큐
다단계 큐와 유사하나 큐 간의 프로세스 이동이 가능하다.
Q. 시스템 입장에서 성능 척도란 무엇인가요?
CPU 이용률 : 전체 시간 중 CPU가 일한 시간에 대한 비율
처리량 : 시간 당 몇개의 프로세스를 완료하는지 측정
Q. 프로세스 입장에서 성능 척도란 무엇인가요?
소요시간 : 프로세스가 CPU 자원을 쓰러 와서 다 쓰고 나갈 때까지의 걸린 전체 시간
대기시간 : ready queue에서 기다리는 전체 대기 시간
응답시간 : ready queue에 들어와서 처음 CPU 자원을 얻기까지 걸린 시간
Q. 교착상태 (Deadlock) 이란 무엇인가요 ?
두 개 이상의 프로세스가 서로 상대방의 작업이 끝나기만을 기다리면서 무한히 대기하는 상태를 말합니다.
프로세스와 스레드 모두 이런 상황이 발생할 수 있습니다.
Q. 데드락의 4가지 필요조건은 무엇입니까?
- 상호 배제 : 한 프로세스가 자원을 독점하면 다른 프로세스는 접근이 불가능하다.
- 점유와 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태이다.
- 비선점 : 다른 프로세스가 사용중인 자원을 강제적으로 가져올 수 없다.
- 환형 대기 : 프로세스 A는 프로세스 B의 자원을 요구하고 프로세스 B는 프로세스 A의 자원을 요구하는 상황으로 서로가 서로의 자원을 요구하는 상태이다.
Q. 경쟁 상태 (Race Condition) 이란 무엇입니까?
두 개이상의 프로세스가 공유자원에 동시에 읽거나 쓰는 상황. 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있다.
Q. 교착 상태를 해결하는 방법에 대해 설명해주세요
1. 교착 상태 예방 또는 회피
- 교착상태의 조건에 부합하지 않도록 설계한다.
- 은행원 알고리즘: 교착 상태 가능성이 없을 때만 자원할당되며, 총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정, 불안정 상태로 나누고 안정 상태로 가도록 자원을 나누는 알고리즘이다.
2. 교착 상태 탐지 및 복구
- 교착 상태가 발생하면 문제가 발생하지 않도록 조치를 취한다.
- 사이클이 있는지 찾아보고 이에 관련된 프로세스를 하나씩 지운다.
3. 교착 상태 무시 :
- 교착상태는 드물게 일어나므로 교착 상태 발생시 처리하는 비용 또는 교착 상태를 예방하는 비용이 더 크므로 아예 프로세스를 종료한다. (필요에 따라 재부팅을 한다.)
- 이는 대부분의 운영체제가 사용하는 방법이다.
Q. 가상 메모리란 무엇입니까?
가상메모리란 메모리 관리 기법중 하나이다. 실제 컴퓨터가 가진 메모리 공간은 한정적이므로 이를 추상화하여 사용자에게 실제로 가진 것보다 더 큰 메모리로 보이게 한다. MMU 는 가상주소를 실제 데이터가 저장되는 물리 주소로 변환한다.
메인 메모리(주기억 장치, RAM)와 디스크(보조 기억 장치 HDD, SSD)의 일부 공간인 스왑 공간을 묶어서 마치 하나의 메모리 인 것처럼 동작하게 하여, 물리적인 메모리의 한계를 넘어서 사용할 수 있게 한다.
Q. 가상 메모리가 필요한 이유는 무엇인가요? (가상 메모리의 장점)
모든 프로그램을 물리 메모리에 다 올릴 수 없으며, 프로그램을 교체하면서 올리게 되면 컨택스트 스위칭 오버헤드가 발생한다.
가상 메모리를 사용하게 되면 이러한 메모리 의존성이 없어진다. 즉, 실제 프로그램의 용량이 물리 메모리보다 커도 되며, 전체 프로그램을 메모리에 올리지 않고도 실행할 수 있게 된다.
Q. 스와핑에 대해 설명해주세요
프로그램이 실행되면 필요한 데이터는 페이지라는 단위로 RAM에 저장된다. RAM이 가득 찼을 때 운영체제는 사용하지 않는 영역 (페이지 또는 프로세스의 일부)을 하드디스크의 스왑 공간으로 옮긴다. 그리고 하드디스크에 있는 일부분을 불러와서 마치 하나의 메모리처럼 쓰는 것을 스와핑이라고 한다.
Q. 메모리 할당 방식 중에서 연속 할당 방식에 대해 설명해주세요
- 고정 분할 방식 : 메모리를 미리 나누어 관리하는 방식. 메모리가 미리 나뉘어 있기 때문에 유연성이 없다. 내부단편화가 발생한다.
- 가변 분할 방식 : 메모리를 프로그램의 크기에 맞게 동적 할당하는 방식. 내부 단편화는 발생하지 않고 외부단편화가 발생한다.
Q. 외부 단편화와 내부 단편화에 대해서 설명해주세요.
내부 단편화 : 메모리를 나눈 크기보다 프로그램이 작아서 비어있는 공간이 많이 발생하는 현상
외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상.
Q. 메모리 할당 방식 중에서 불연속 할당 방식에 대해 설명해주세요
Q. 페이징이란
페이징 기법은 동일한 크기의 페이지 라는 단위로 나누어서 메모리를 관리한다. 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없앤다. 물리 메모리를 Page Frame 이라고하고 논리 메모리는 Page 단위로 나눈다.
hole 의 크기가 균일하지 않다는 문제가 없어지지만 내부 단편화 현상이 발생할 수 있다.
홀(hole): 할당가능한 비어있는 메모리 공간
Q. 세그먼트란
서로 다른 크기의 논리적 단위인, (의미 단위인) 세그먼트로 나누는 방식이다.
hole크기가 균일하지 않다는 단점이 있다.
Q. 페이징 기법과 세그멘테이션 기법의 공통점과 차이는 무엇인가요?
페이징과 세그멘테이션이 공통점은 두 기법 다 메모리를 연속적으로 할당하지 않아도 되도록 한다는 점, 즉 불연속 할당 방식이라는 것에 있다.
페이징은 프로그램을 고정된 크기의 페이지로 분할한다. 반면, 세그멘테이션은 논리적 의미를 기준으로 분할한다.
Q. 페이지 교체 알고리즘에 대해 설명해주세요.
OPT : 앞으로 미래에 가장 오랫동안 사용하지 않을 페이지를 교체한다. 모든 알고리즘 중에서 가장 page fault 발생이 적다.
FIFO : 메모리에 가장 먼저 올라온 페이지를 교체한다.
LRU (Least Recently Used) 알고리즘 : 가장 오랫동안 사용하지 않은 페이지를 교체한다. 최적 알고리즘과 비슷한 효과를 낸다. 많은 운영체제가 채택함.
LFU (Least Frequently Used): 참조 횟수가 가장 적은 페이지를 교체하는 알고리즘이다. 교체 대상이 여러개라면 가장 오랫동안 사용하지 않은 페이지를 교체한다.
MFU (Most Frequently Used): 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘이다.
NUR = NRU (Not Used Recently, Not Recently Used) : 클럭 알고리즘,
LRU 알고리즘에서 발전. 0과 1을 가진 비트가 있다. 1은 최근에 참조, 0 은 참조되지 않았음을 의미한다. 시계 방향으로 돌면서 0을 찾고 해당 부분을 1로 바꾸는 알고리즘이다.
최근에 사용하지 않은 페이지를 교체.
LRU 를 구현하기 위해 사용하는 자료구조 : 해시 테이블 + 이중 연결 리스트
Q. 뮤텍스와 세마포어에 대해 설명해주세요
뮤텍스 : 공유자원에 대해 Lock 을 사용하여 관리하는 매커니즘이다. 프로세스나 스레드가 Lock() 으로 공유자원을 잠금하고 사용 후에 Unlock() 으로 잠금 해제하는 객체이다. 뮤텍스는 잠금, 잠금 해제라는 두가지 상태만을 가진다.
세마포어 : 일반화된 뮤텍스이다. 뮤텍스와의 차이점은 신호 기반이라는 것이다. wait() 와 signal() 함수를 이용하여 공유자원을 관리하는데, wait()는 자신의 차례가 올 때까지 기다리는 함수이다. 반면 signal() 은 다음 프로세스로 순서를 넘겨주는 함수이다.
Q. 메모리 계층에 대해 설명해주세요
레지스터, 캐시, 메모리, 저장장치로 구성되어 있습니다.
레지스터는 CPU 안의 작은 저장장치로 속도가 가장 빠르며 휘발성을 가지고 있습니다. 용량이 가장 작습니다. 캐시는 그 다음 계층으로, L1, L2 캐시를 의미합니다. 속도가 빠르며 휘발성을 가지고 있습니다. 메모리는 주기억장치라고도 하며 RAM을 의미합니다. 휘발성을 가지며 속도는 보통입니다. 저장장치는 보조기억장치라고도 하며 HDD나 SSD가 여기에 해당됩니다. 비휘발성이며 속도가 가장 느리지만 용량은 가장 많습니다.
Q. 메모리 계층 구조는 왜 필요할까요?
우선, 메모리 계층 구조는 속도와 용량의 균형을 맞추기 위해서 필요하다. 성능을 위해서 처리 속도와 용량의 상호 보완을 위해 고안한 방법이 메모리 계층 구조이다. 속도만 고려하게 되면 용량이 적어지게 되고, 반대로 용량만 고려하게 되면 속도가 느려질 수 있다.
두번째로, 지역성의 원리에 따르면 최근에 사용한 데이터에 다시 접근할 가능성이 높다. 따라서 자주 쓰일 것 같은 데이터는 메모리에서 캐시로 읽어와서 메모리까지 접근하지 않고 캐시에서 데이터를 접근하도록 하여 시간을 단축시킬 수 있다. 또한 자주 쓰이는 데이터는 일부분이므로 전체 데이터에 비해서 작은 양일 것이다. 마지막으로, 하드 웨어 장비의 경제성을 고려할 수 있다. 메모리 계층 구조 위로 갈 수록 가격이 비싸지므로, 비싼 하드웨어는 필요한 크기만큼 사용하고 저렴한 하드웨어는 여유롭게 사용하도록 구조화할 수 있다.
Q. 파일시스템을 사용하는 이유는 무엇인가요 ?
파일 시스템은 시스템 내의 파일에 대한 정보를 제공하는 계층적 디렉토리 구조이다. 파일 및 파일의 메타데이터, 디렉토리 정보를 관리한다.
파일 시스템은 다양한 보안 기능을 제공하여 파일에 대한 접근을 제어한다. 또한 파일 시스템은 데이터를 디스크와 같은 보조 저장 장치에 효율적으로 저장하고 빠르게 접근하는 방법을 제공한다.
파일 : 논리적인 저장 단위이다. 일반적으로 보조 기억 장치에 저장된다.
디렉토리 : 파일의 메타데이터 중 일부를 보관하는 일종의 특수한 파일이다.
'Computer Science > CS 기술 면접 스터디' 카테고리의 다른 글
주니어 개발자 CS 기술 면접 예상 질문 - 자료구조 (0) | 2024.01.28 |
---|---|
주니어 개발자 CS 기술 면접 예상 질문 - 운영체제 (1) (1) | 2024.01.13 |