📌 프로세스와 쓰레드의 차이에 대해 설명해주세요.
- 프로세스는 실행 중인 프로그램을 말하며, 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있습니다.
- 쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)영역을 공유하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있습니다. 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행됩니다.
- 멀티태스킹은 하나의 운영체제 안에서 여러 프로세스가 실행되는 것 입니다.
- 멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것입니다.
멀티스레드의 장점
- Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
- 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.
멀티스레드의 단점
- 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
- 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다. 또한 스레드의 스케줄링은 운영체제가 저리하지 않기 때문에 프로그래머가 직접 동기화 문제에 대응할 수 있어야 한다.
- 프로세스는 다른 프로세스와 정보를 공유하려면 IPC를 사용하는 등의 번거로운 과정을 거쳐야 하지만, 스레드는 기본 구조 자체가 메모리를 공유하는 구조이기 때문에 다른 스레드와 정보 공유가 쉽습니다. 때문에 멀티태스킹보다 멀티스레드가 자원을 아낄 수 있게 됩니다. 다만 스레드의 스케줄링은 운영체제가 처리하지 않기 때문에 프로그래머가 직접 동기화 문제에 대응할 수 있어야 합니다.
📌 멀티 프로세스와 멀티 쓰레드의 특징에 대해 설명해주세요.
멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만
멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.
멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만
하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받으며 동기화 문제도 있다는 단점이 있습니다.
📌 멀티 쓰레드의 동시성과 병렬성을 설명해주세요.
동시성: 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드가 번갈아 실행하는 것을 말합니다. (동시에 실행하는 것처럼 보이지만 사실은 번갈아가며 실행하고 있는 것임)
병렬성: 멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것을 말합니다.
📌 데드락에 대해 설명해주세요.
둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다.
데드락의 4가지 조건
비선점 (Nonpreemptive)
- 다른 프로세스의 자원을 뺏을 수 없음.
순환 대기 (Circular wait)
- 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조.
점유 대기 (Hold & Wait)
- 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구.
상호 배제(Mutual Exclusion)
- 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우.
📌데드락(Deadlock)의 해결법
1) 데드락 예방(Prevention)
데드락의 발생조건 4가지 중 하나라도 발생하지 않게 하는 것
- 자원의 상호 배제 조건 방지 : 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 한다.
- 점유 대기 조건 방지 : 프로세스 실행에 필요한 모든 자원을 한꺼번에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 한다.
- 비선점 조건 방지 : 이미 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 한다.
- 순환 대기 조건 방지 : 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구할 수 있도록 함.
2) 데드락 회피(Avoidance)
Safe state : 시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있는 상태
Safe sequence : 특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서
회피 알고리즘 : 자원을 할당한 후에도 시스템이 항상 Safe state에 있을 수 있도록 할당을 허용하자는 것이 기본 특징
🔑 은행원 알고리즘(Banker’s Algorithm)
다익스트라가 제안한 기법으로, 어떤 자원의 할당을 허용하는지에 관한 여부를 결정하기 전에, 미리 결정된 모든 자원들의 최대 가능한 할당량을 가지고 시뮬레이션 해서 Safe state에 들 수 있는지 여부를 검사한다. 즉 대기중이 다른 프로세스들의 활동에 대한 교착 상태 가능성을 미리 조사하는 것
은행원 알고리즘의 경우, 이처럼 미리 최대 자원 요구량을 알아야 하고, 할당할 수 있는 자원 수가 일정해야 하는 등 사용에 있어 제약조건이 많고, 그에 따른 자원 이용도 하락 등 단점도 존재
3) 데드락 탐지(Detection) 및 회복(Recovery)
- 탐지 기법
- Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색합니다. 즉, 은행원 알고리즘에서 했던 방식과 유사하게 현재 시스템의 자원 할당 상태를 가지고 파악합니다.
- 이 외에도 자원 할당 그래프를 통해 탐지하는 방법도 있습니다.
- 회복 기법
- 단순히 프로세스를 1개 이상 중단시키기
- 교착 상태에 빠진 모든 프로세스를 중단시키는 방법 : 계속 연산중이던 프로세스들도 모두 일시에 중단되어 부분 결과가 폐기될 수 있는 부작용이 발생할 수 있음
- 프로세스를 하나씩 중단 시킬 때마다 탐지 알고리즘으로 데드락을 탐지하면서 회복시키는 방법 : 매번 탐지 알고리즘을 호출 및 수행해야 하므로 부담이 되는 작업일 수 있음
- 자원 선점하기
- 프로세스에 할당된 자원을 선점해서, 교착 상태를 해결할 때까지 그 자원을 다른 프로세스에 할당해 주는 방법
- 단순히 프로세스를 1개 이상 중단시키기
- 데드락을 탐지 기법을 통해 발견했다면, 순환 대기에서 벗어나 데드락으로부터 회복하기 위한 방법
📌 콘보이 현상(convoy effect)이란 무엇이고, 콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인지 설명해주세요.
- 작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦춰져 효율성을 떨어뜨리는 현상을 말합니다.
- FCFS(First-Come First Served) 스케줄링은 순차적으로 먼저 큐에 들어온 작업부터 실행하므로 콘보이 현상이 발생할 수 있습니다.
📌 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.
선점형은 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있음을 말하고,
비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음을 말합니다.
📌 동기와 비동기의 차이에 대해 설명해주세요.
동기는 순차적, 직렬적으로 테스크를 수행하고, 비동기는 병렬적으로 테스크를 수행합니다.
예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때,
동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 테스크들은 블로킹(Blocking, 작업 중단)됩니다.
비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 테스크를 계속해 수행합니다.
Synchronous & Asynchronous 의 차이
- 둘의 차이는 함수가 다른 함수를 호출한 이후, 호출된 함수의 작업 완료 여부에 신경을 쓰는지의 여부에 있습니다.
- Synchronous : 다른 함수를 호출한 이후에 해당 함수가 작업을 완료했을 때 리턴을 받거나 작업을 완료했는지 지속적으로 확인하는 방식을 통해 신경씁니다.
- Asynchronous : 호출한 함수는 호출된 함수의 작업 완료 여부에 대해 확인받거나 물어보는 과정없이 신경쓰지 않습니다.
- 이를 구현하기 위해 호출된 함수는 별도의 thread를 생성하여 자신의 작업을 실행하며, 완료 시 callback 함수를 통해 완료 여부를 알려주게 됩니다.
Blocking & Nonblocking 의 차이
- 둘의 차이는 다른 함수에 의해 호출된 함수가 즉시 리턴을 하는지 여부에 있습니다.
- Blocking의 경우 호출된 함수는 자신의 작업이 완료될 때 까지 호출한 함수에 리턴하지 않습니다. 제어권을 자신이 가지고 있기 때문에 호출한 함수는 호출된 함수가 작업을 완료하고 리턴할 때 까지 대기하게 됩니다.
- Nonblocking의 경우 호출된 함수는 거의 즉시 자신을 호출한 함수에 리턴합니다. 제어권을 호출한 함수에 돌려주는 것이기 때문에 호출한 함수는 자신의 작업을 이어갈 수 있습니다.
=> 이 둘의 가장 큰 차이는 호출한 함수가 자신의 작업을 계속 할 수 있는지 대기해야하는지 여부라고 할 수 있습니다.
"Synchronous & Asynchronous" 와 "Blocking & Nonblocking" 의 차이
- Synchronous와 Asynchronous는 호출된 함수의 작업 완료 여부를 호출한 함수가 신경을 쓰는지를 구분하는 방식이라면, -Blocking과 Nonblocking은 호출된 함수가 호출 즉시 리턴을 하는지 여부에 따라 구분하는 방식입니다.
- 구현 방식으로 비교해보면, Asynchronous는 별도의 thread를 생성하여 호출된 함수를 실행하는 방식으로 구현하며, Nonblocking는 호출된 함수 자체의 제어문에서 지체없이 리턴하는 방식으로 구현합니다.
📌 Critical Section(임계영역)에 대해 설명해주세요.
- 프로세스간 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역
임계 영역 문제를 해결하기 위해서는 아래의 3가지 조건을 충족해야 합니다.
1) 상호 배제(Mutual exclution)
- 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
2) 진행(Progress)
- 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정 해주어야 한다.
3) 한정 대기(Bounded waiting)
- 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 영역에 들어갈 때 제한을 두어야 한다.
📌 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이에 대해 설명해주세요.
1)
- 뮤텍스는 Lock을 사용해 하나의 프로세스나 쓰레드를 단독으로 실행하게 합니다.
- 세마포어는 공유자원에 세마포어 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.
세마포어의 변수 → 공유자원의 개수를 나타내는 변수
2)
현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
3)
0과 1의 값만 갖는 세마포어 → 이진 세마포어(binary semaphore) (= 뮤텍스)
도메인 제한이 없는 세마포어(0,1 뿐만아니라 2,3,4 등의 값들 또한 가질 수 있는) → 카운팅 세마포어(counting semaphore)
📌 페이지 교체 알고리즘에 대해 설명해주세요.
- 페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이징 부재시) 어떤 페이지 프레임을 선택해 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
- FIFO(first in first out)
- 가장 간단한 알고리즘으로, 메모리에 올라온 지 가장 오래된 페이지를 교체합니다. 간단하고, 초기화 코드에 대해 적절한 방법이며, 페이지가 올라온 순서를 큐에 저장합니다.
- 최적(Optimal) 페이지 교체
- 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 알고리즘입니다. 최적 페이지 교체는 선행 조건이 있는데, 프로세스가 앞으로 사용할 페이지를 미리 알아야 한다는 것입니다. 이 조건은 실제 활용에선 알 방법이 없기 때문에 최적 알고리즘은 구현이 불가능한 알고리즘입니다. 때문에 연구를 목적으로 주로 사용됩니다.
- LRU(least-recently-used)
- 가장 오래 사용되지 않은 페이지를 교체하는 알고리즘입니다. OPT 알고리즘의 방식과 비슷한 효과를 낼 수 있는 방법이며, OPT 알고리즘보다 페이지 교체 횟수가 높지만 FIFO 알고리즘 보다 효율적입니다.
- LFU(least-frequently-used)
- 참조 횟수가 가장 작은 페이지를 교체하는 알고리즘입니다. 만약 대상인 페이지가 여러 개 일 경우, LRU 알고리즘을 따라 가장 오래 사용되지 않은 페이지로 교체합니다.
- MFU(most-frequently-used)
- LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘입니다.
- LFU와 MFU는 실제 사용에 잘 쓰이지 않는다.
- 구현에 상당한 비용이 들고,
- 최적 페이지 교체 정책을 (LRU 만큼) 제대로 유사하게 구현해내지 못하기 때문이다.
📌 컨텍스트 스위칭(Context Switching)이 무엇인지 설명해주세요.
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)을 교체하는 작업을 말합니다.
📌 파일 시스템(File System)이란?
컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 가리키는 말
파일 시스템은 일반적으로 크기가 일정한 블록들의 배열(섹터라고도 불리며 통상 512바이트, 1키비바이트, 2키비바이트 같은 2를 제곱수만큼의 크기를 갖는다)에 접근할 수 있는 자료 보관 장치 위에 생성되어 이러한 배열들을 조직함으로 파일이나 디렉터리를 만들며 어느 부분이 파일이고 어느 부분이 공백인지를 구분하기 위하여 각 배열에 표시를 해 둔다.
자료를 ‘클러스터’ 또는 ‘블록’이라고 불리는 일정한 단위(이것은 각 디스크 배열들에 대한 식별할 수 있는 번호를 제공하는데 통상 1부터 64까지가 쓰인다)에 새겨 넣는데 이것이 바로 파일 하나가 필요로 하는 디스크의 최소 공간이다.
2) 파일 시스템의 종류
2.1. FAT
- FAT(File Allocation Table) 파일 시스템은 빌 게이츠와 마크 맥도널드가 1976년부터 1977년에 이르는 기간 동안 개발
- FAT라는 이름은 어느 영역에 파일이 속해 있는지, 공간에 여유가 있는지, 또 어디에 각 파일이 디스크에 저장되어 있는지에 대한 정보를 중심으로 하는 테이블을 이용하는 것에서 비롯한다.
- 상대적으로 간단한 파일 시스템. 성능은 상대적으로 다른 파일 시스템보다 좋지 않다. 너무나도 단순한 자료 구조 사용을 사용하고, 조그마한 파일이 많으면 공간 활용률이 적어지기 때문이다.
2.1.1. FAT12
- MS-DOS 초기부터 주로 쓰임
- 플로피 디스크에서 사용
2.1.2. FAT16
- 32메가바이트 이상의 하드 디스크를 지원하기 위해 MS-DOS 3.0과 함께 나왔으며 윈도우 95까지 주로 이용되었다.
- 최대 2기가바이트 파티션을 지원한다.
2.1.3. FAT32
- FAT32(File Allocation Table 32) 오래되고 많이 사용되는 파일 시스템
- 지원하는 드라이브 최대 용량 : 32GB
- 파일 하나당 저장할 수 있는 최대 크기 : 4GB
- 안정성이 좋다.
- 다양한 OS, 기기에 대한 호환성이 좋다.
2.1.4. exFAT
- exFAT(Extended File Allocation Table)는 NTFS의 호환성 문제를 극복하기 위하여 개발된 방식. FAT64라고도 한다.
- 지원하는 드라이브 최대 용량 : 사실상 제한 없음
- 파일 하나당 저장할 수 있는 최대 크기 : 사실상 제한 없음
- 안정성이 떨어짐. USB 안전제거 방식이 아니라 그냥 뽑는 경우 파일 소실 가능성 존재.
2.2. NTFS
- NTFS(New Technology File System)는 FAT32의 약점을 보완하기 위해 개발된 파일 시스템
- 지원하는 드라이브 최대 용량 : 256TB
- 파일 하나당 저장할 수 있는 최대 크기 : 16TB
- 윈도우에서는 최적화되어 있으나 Apple의 MAC OS, Google의 Android, Linux와 같은 기기에서 사용에 제한이 있다.
2.3. ext
- ext(extended file system, 확장 파일 시스템)는 리눅스용 파일 시스템 가운데 하나로, 오늘날 많은 리눅스 배포판에서 주 파일 시스템으로 쓰이고 있다.
2.3.1. ext2
- ext(extended file system, 확장 파일 시스템)를 대체하기 위해 고안
2.4. HFS
- 계층적 파일 시스템(Hierarchical File System, HFS)은 애플이 맥 OS를 구동하는 컴퓨터 시스템에 사용할 목적으로 개발한 파일 시스템
2.5. APFS
- APFS 혹은 애플 파일 시스템(Apple file system, APFS)은 애플에서 macOS, iOS, watchOS, tvOS등에서 범용으로 사용하고자 만드는 파일시스템
리눅스 전용 디스크 기반 파일 시스템 (EXT 시리즈)
파일 시스템 | 설명 |
EXT | - 리눅스 초기에 사용되던 시스템 - 호환성 없음 - EXT2의 원형 - 2GB의 데이터와 파일명 255자까지 지정 가능 |
EXT2 | - 고용량 디스크 사용을 염두하고 설계된 파일 시스템 - 호환과 업그레이드가 쉬움 - 4TB 파일 크기까지 지원 - 설정 방법) mke2fs - t ext2 |
EXT3 | - 리눅스의 대표적인 저널링을 지원하도록 확장된 파일 시스템 - ACL (Access Control List)를 통한 접근 제어 지원 - 16TB의 파일 크기까지 지원 - 설정 방법 1) mke2fs -j - 설정 방법 2) mke2fs -t ext3 |
EXT4 | - 파일에 디스크 할당 시 물리적으로 연속적인 블록을 할당 - 64비트 기억 공간 제한을 없앰 - 16TB 파일 크기까지 지원 - 설정 방법 1) mke2fs -t ext4 |
http://melonicedlatte.com/computerarchitecture/2020/03/02/204500.html
출처: https://dev-coco.tistory.com/162?category=1056309 [슬기로운 개발생활😃]