Q1. 운영체제란? 주요목적은?
운영체제란 하드웨어와 사용자 간의 인터페이스로서 시스템의 자원을 관리하고 프로그램에 대한 일반적인 서비스를 제공하는 시스템 소프트웨어이다. 운영체제는 사용자가 프로그램을 쉽고 효율적으로 실행하도록 하고, 컴퓨터 자원을 관리하고 보호하기 위해 존재한다.
Q2. 커널이란?
하드웨어를 관리하고, 추상화된 자원을 프로그램에 제공하는 소프트웨어로, 하드웨어와 프로그램의 보안을 책임지고 스케줄링을 통해 자원을 관리하며 하드웨어를 추상화하여 프로그램에 제공하기 때문에 프로그래머는 여러 장치에서 동작하는 프로그램을 만들 수 있다.
Q3. System Call이란?
응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스. 유저 모드의 프로그램이 파일 입출력이나 메모리 관리 등 운영체제의 권한이나 자원에 접근해야 하는 경우 system call을 통해 커널모드로 변해 작업을 처리하고, 완료되면 다시 유저 모드로 돌아오는 일련의 과정을 가진다.
Q. User mode와 Kernel mode의 차이는?
먼저 둘을 나눈 목적은 권한을 다르게 하여 자원에 대한 접근을 제한하기 위해서이다. 유저모드는 응용프로그램이 실행되는 모드로, 각 프로세스는 자신의 주소 공간에서만 동작하기 때문에 오류가 발생해도 전체 시스템이 다운되는 것을 막을 수 있으며 특권 명령을 실행할 수 없다. 반대로 커널모드는 시스템 자원이나 하드웨어에 직접 접근이 가능하고, 특권 명령을 실행할 수 있다. 이때 특권 명령이란 입출력 명령, 메모리 관리 등과 같이 하드웨어 자원을 직접 조작하거나 시스템을 제어하는 등의 작업인데, 접근 제한을 통해 잘못된 명령으로 인해 시스템이 다운되는 것을 방지하고 안정성을 높입니다.
Q. Interrupt란?
하드웨어나 소프트웨어에서 이벤트가 발생하였을 때 CPU에게 알려 현재 실행중인 프로세스를 잠시 중단하고 해당 이벤트부터 처리하도록 하는 매커니즘이다. 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉘는데, 하드웨어 인터럽트는 CPU 외부로부터 인터럽트 요구 신호가 와 발생하는 인터럽트로 입출력, 장치 오류 등으로 발생하고, 소프트웨어 인터럽트는 시스템 콜이나 허용되지 않는 연산을 수행하려고 할 때 발생한다.
Q. Interrupt의 처리과정은?
CPU는 인터럽트가 발생하면 현재 실행중인 프로세스의 상태를 PCB에 저장하고, 인터럽트 벡터를 통해 인터럽트 서비스루틴의 시작주소를 찾는다. 이후 인터럽트의 서비스 루틴을 실행한 후 종료하면 PCB에 저장해두었던 프로세스의 상태를 다시 CPU로 가져와 프로세스를 다시 실행한다.
Q. PCB(프로세스 제어 블록)이란?
운영체제에서 프로세스를 관리하기 위한 운영체제 커널의 자료구조로, 프로세스가 생성될 때 PCB가 생성되고 종료될 때 PCB가 삭제된다. 인터럽트가 발생하거나 Context Switching이 발생할 때 프로세스의 현재상태를 자신의 PCB에 저장해두고, 다시 재개될 때 해당 상태와 실행 위치를 복구한다.
Q. 프로세스란? 프로세스의 상태는?
실행중인 프로그램으로 각 프로세스는 별도의 실행 환경과 상태를 가진다. 프로세스는 시스템 시작 시나, 프로세스 생성 system call, 사용자의 요청, 배치 작업의 시작 시에 생성된다. 프로세스는 크게 3가지 상태(Running, Blocked, Ready)상태를 가진다. 프로세서가 실행중인 프로세스는 Running 상태이고, 입출력 작업 등의 인터럽트가 발생 시 Blocked 상태로 변한다. Blocked된 상태가 해제되거나 Running 상태의 프로세스가 timeout 되면 Ready 상태로 이동한다. 이외에도 Disk로 Swap Out된 상태인 suspend 상태도 존재하는데, 이 상태는 외부에서 다시 시작을 해주어야 active한 상태로 돌아온다.
Q. 프로세스의 종류에는 어떤 것들이 있는가?
Q. 스레드란?
스레드는 하나의 프로세스 내에서 실행되는 단위로, 프로세스의 제어 흐름이다. 하나의 프로세스 안의 스레드 간에는 같은 메모리 공간을 공유하여 스레드 간 통신이 가능하다. 스레드에는 User-Level 스레드와 Kernel-Level 스레드가 존재한다. 커널 스레드는 커널이 각각의 스레드를 1:1로 관리하는 구조로, 하나의 스레드가 block되어도 다른 스레드는 계속 작업이 가능하다. 유저 스레드는 유저 레벨 스레드 라이브러리에 의해 관리되며 커널은 스레드의 존재를 모른다. 따라서 운영체제는 전체 프로세스의 스케줄링만 담당할 뿐 유저 스레드의 스케줄링을 담당하지 않는다.
Q. 프로세스와 스레드의 차이는?
프로세스는 각각 독립된 메모리 공간과 주소 공간을 가지는 반면 스레드는 프로세스 내의 메모리와 주소를 공유한다. 스레드는 stack만 별도로 공유받는다. 프로세스는 IPC를 통해 프로세스 간 통신을 하지만 스레드는 필요하지 않다. Context Switching 비용이 프로세스가 더 비싸다.
Q. PC 레지스터와 Stack이 스레드마다 독립적인 이유는?
각 스레드는 별도의 함수 호출을 진행하기 때문에, 함수의 지역변수와 반환값 등의 데이터를 저장할 공간이 스레드마다 필요하게 된다. 또한 별도의 스택 공간을 가짐으로써 다른 스레드가 해당 메모리를 덮어쓰지 못하게 하여 데이터를 보호한다. PC 레지스터도 마찬가지로, 스레드는 스케줄링의 대상이기 때문에 다시 돌아왔을 때 명령이 어디까지 수행되었는지 기억하기 위해 필요하다.
Q. 멀티프로세스란? 멀티스레드란?
하나의 프로그램을 여러 프로세스가 처리하는 것을 의미한다. 하나의 프로세스에 문제가 생겨도 전체 프로그램의 동작은 중지되지 않지만 메모리를 공유하지 않기 때문에 Context Switching 비용이 비싸다. 멀티 스레드는 하나의 프로세스 내에서 여러 스레드가 동시에 수행하는 작업의 흐름으로 코드, 데이터, 힙 영역을 공유하기에 context switching 비용이 적고 시스템 자원의 낭비가 적다. 동시성을 지원한다. 하지만 멀티스레드 방식은 하나의 스레드에 문제가 발생하면 전체 스레드가 동작하지 않고 여러 스레드가 공유 자원에 접근하기 때문에 동기화로 인한 병목 현상이 발생한다는 문제가 있다.
Q. context switching이란?
현재 CPU에서 실행중인 프로세스가 인터럽트로 인해 중단되고 다른 프로세스가 실행되어야 할 때, PCB에 현재 프로세스의 상태를 저장하고, 새로운 프로세스를 PC 레지스터로 올리는 것을 의미합니다.
Q. IPC란? 종류는?
IPC란 프로세스 간 데이터를 주고받는 방법을 의미합니다. IPC를 통해 프로세스를 병렬로 실행함으로써 성능을 높일 수 있다. IPC의 종류에는 여러가지가 존재한다.
Q. 멀티스레드 방식이 야기할 수 있는 문제들은?
Q. Critical Section을 해결하기 위한 조건은?
Mutual Exclusion으로 하나의 프로세스가 임계 영역에 들어갔다면 다른 프로세스는 들어갈 수 없는 상태이다. Progress는 임계 영역에 들어가고자 하는 프로세스가 여러개면 어느 것이 들어갈지 결정해주어야 한다. Bounded Waiting은 한 프로세스가 한번 임계 영역에 들어갔다면 제한을 두어 어떤 프로세스가 기아 상태가 되는 것을 방지해야 한다.
Q. Mutual Exclusion 알고리즘엔?
Q. Busy Wait이란?
프로세스가 자원에 대한 접근 권한을 얻기 위해 수시로 가능 여부를 확인하기 위해 무한 루프를 도는 것을 의미한다.
Q. Producer-Consumer 문제란?
생산자의 생산 속도와 소비자의 소비 속도 사이의 속도 차이로 인해 발생하는 문제로, 가득 차거나 빈 상태에서 Busy wait이 발생할 수 있고, 임계 구역에 동시에 접근할 수 있어 count에 오류가 발생할 수 있는 race condition이 발생할 수 있다.
Q. 동기화 문제를 해결할 수 있는 방법은?
Q. 2진 세마포어와 뮤텍스의 차이는?
뮤텍스는 락을 가진 스레드만 임계영역에서 나갈때 해제할 수 있는데, 2진 세마포어는 더 높은 우선순위를 가지는 스레드가 해제시킬 수 있습니다. 또한 2진 세마포어는 여러 스레드가 세마포어를 동시에 획득할 수 있습니다.
Q. DeadLock의 조건은?
Q. 철학자의 식사 문제와 해결방법은?
전형적인 DeadLock 문제로, 여러 해결 방법이 있다. 일단 젓가락 두 개를 모두 집을 수 있을 때만 잡을 수 있도록 하거나, 비대칭 기법을 통해 홀수 번째 사람은 왼쪽, 짝수 번째 사람은 오른쪽 젓가락부터 잡게 하여 방지할 수 있다. 하지만 이때 기아상태도 고려해야한다.
Q. Banker's 알고리즘이란?
교착상태 회피 기법 중 하나로 교착상태에 빠질 가능성이 있는 상태를 가능성이 없어질 때까지 미루는 방법입니다. 안전 순서열을 나열하고, 프로세스가 요청할 최대 자원량만큼 보유하고 있는 상태를 안전 상태라고 합니다.
Q. Starvation과 Aging기법은?
기아 상태는 프로세스가 자신의 우선순위보다 높은 우선순위들만 계속하여 실행되어 오랫동안 CPU할당을 받지 못하는 상태를 의미합니다. 이는 Aging기법을 통해 해결할 수 있습니다. Aging기법은 오랫동안 기다린 프로세스의 우선순위를 점차 높여 실행될 수 있도록 하는 방법입니다.
Q. 가상 메모리란?
가상 메모리는 물리적으로 가능한 공간보다 더 많은 공간의 메모리를 추상화하여 실행에 필요한 일부만 메인 메모리에 적재하고, 나머지 부분은 디스크에 두지만 마치 프로세스 전체가 메인 메모리 위에서 동작하도록 사용자에게 보여지게 하여 물리적 메모리의 한계를 극복하는 메모리 관리 기법이다. 가상 메모리 기법을 통해 더 많은 프로세스를 동시에 실행할 수 있도록 한다.
Q. MMU란?
메모리 버스에서 메모리 참조를 검사하여 가상 메모리의 주소를 실제 물리 주소의 메모리 주소로 변환하는 역할을 한다. 또한 물리 메모리에 페이지가 존재하지 않는다면 인터럽트를 걸어 OS로 하여금 페이지 교체 기법에 따라 페이지를 교차하게 된다. MMU는 가상 주소 공간을 페이지라는 단위로 나누고, 페이지 테이블로 페이지의 위치를 찾는데, 이때 페이지 테이블은 RAM에 위치한 페이지들의 위치를 기록한 테이블이다.
Q. 내부단편화와 외부단편화의 차이는?
단편화는 메모리의 공간이 존재하지만 여러 부분으로 쪼개져있어 실제로는 사용이 불가능한 상태를 의미합니다. 내부단편화는 메모리를 할당받을 때 프로세스의 크기보다 더 큰 크기를 할당받음으로써 사용하지 않는 공간이 생기는 현상을 의미합니다. 외부 단편화는 메모리를 할당받았다가 반납하였을 때 생기는 공간들이 합치면 하나의 프로세스를 실행할 수 있지만 쪼개져있어 사용하지 못하고 낭비되는 현상을 의미한다.
Q. 페이징과 세그먼테이션이 무엇이고 차이는?
가상메모리의 메모리 관리 전략으로 프로그램 단위의 가상 메모리 상에서는 연속적으로 주소가 할당된 방식이지만, 실제 물리 메모리에는 불연속으로 할당된 방식이다. 그 중에서 페이징 기법은 가상 메모리 공간을 고정된 크기의 페이지로 나누어 외부 단편화 문제를 해결한다. 페이지의 크기와 동일한 크기로 물리 메모리를 프레임으로 나누고, 페이지와 프레임을 일대일로 매핑하면서 구현한다. 세그먼테이션은 프로세스를 서로 다른 크기의 논리적 단위인 세그먼트로 용도에 따라 크기를 나눌 수 있어 프로그래머에 의존적이다. 내부 단편화 문제는 발생하지 않지만 세그먼트를 반납하면 외부 단편화가 발생할 수 있다.
Q. Thrashing이란?
스레싱은 너무 잦은 Page Fault가 발생하여 마치 작업이 멈춘 것처럼 보이는 현상이다. 즉 프로세스가 코드를 수행하는 것보다 disk와 swapping을 하느라 바쁜 상태를 thrashing이라고 한다. 멀티프로그래밍에서 I/O를 위해 Waiting 상태로 프로세스가 이동하면 Ready Queue에서 새로운 프로세스를 가져와 실행하는데, 너무 많은 프로세스가 Page Fault로 인해 Waiting상태로 쌓이면 어느 순간부터 물리 메모리 공간을 사용하고자 하는 프로세스가 너무 많아져 CPU 이용률이 급격하게 떨어지는 것을 Thrashing이라고 한다.
Q. Page Fault란?
Page Fault란 페이지가 실제 물리 메모리에 없는 상태를 의미합니다. Page Fault가 일어나면 페이지 교체 알고리즘을 통해 메모리에서 삭제할 페이지를 정하고, Disk에 있는 프레임과 교체해야 합니다.
Q. Demand Paging이란?
실제로 필요한 페이지만 메모리에 올린다는 의미입니다. 하나의 프로그램을 모두 RAM에 적재하여 실행할 수 없기 때문에 CPU는 가상 메모리를 통해 모두 RAM에 있는 것처럼 인식하지만 실제로는 Demand Paging기법을 통해 현재 사용하는 페이지만 RAM에 적재하고 나머지는 Disk에 저장합니다. 그리고 Disk에 있는 페이지가 필요하다면 Swap을 통해 교체합니다.
Q. 페이지 교체 알고리즘엔?
Q. 연속할당과 불연속할당의 차이는?
운영체제의 스케줄링이란? 스케줄링은 언제 발생하는가?
Long/Midium/Short 스케줄러란?
선점형, 비선점형 스케줄링의 차이는?
CPU 스케줄러 중
FCFS
SJF
SRT
Priority scheduling
RR
동기와 비동기의 차이는?
blocking, nonblocking 차이는?
콘보이 현상이란?
캐시의 지역성이란?
멀티 프로세싱과 멀티프로그래밍의 차이는?
DMA란?
힙과 스택의 차이는?
RAID란?
스풀링이란?'
CPU Bound 와 IO Bound의 차이는?
TLB란?
CPU와 GPU의 차이는?
Q. 시간적 지역성과 공간적 지역성은?
지역성의 개념은 캐시의 Hit Ratio를 증가시키기 위해 등장하였다. CPU와 주기억장치 사이의 속도차이를 줄이기 위해 데이터를 캐시 메모리에 저장하는데, 이때 시간적이나 공간적으로 가까운 데이터를 블록 단위로 가져와 Hit Ratio를 높이고자 하는 것이 목표이다. 시간적 지역성은 가까운 미래에 한번 참조했던 데이터가 또다시 참조될 것이라는 가정을 두는 것이다. 예시로 반복문의 경우 같은 변수값을 계속 접근하기 때문에 시간적 지역성을 고려하여 캐시에 저장해두는 것이 이득이다. 공간적 지역성은 접근한 데이터와 인접한 데이터도 참조할 확률이 높다는 가정을 두는데, 배열과 같은 경우 바로 다음 값에 접근하기 때문에 인접 데이터도 캐시로 저장하는 것이 이득이다.
Prepaging이란?