1. 프로세스란?
'프로그램(실행파일)'이 메모리 에 적재되어 CPU를 할당받아 실행되는 것
code, data, stack, heap 총 4가지 영역으로 나뉘며,
code영역은 코드가 저장되며 기계어로 해석되는 곳
data영역은 전역 변수(global) 와 static 변수가 저장되는 곳
heap 영역은 프로그래머가 직접 공간을 malloce(memory allocator)/free -> 할당/해제 하는 곳
stack 영역은 지역 변수와 매개 변수가 저장되는 곳
2. 멀티 프로세스란?
두 개 이상의 프로세스가 실행되는 것.
동시성과 병렬성 , 각각 concurrency , parallelism
cpu의 core가 하나일 때 번갈아 연산을 해야한다 . 이것이 동시성
cpu의 core가 여러개일 때, 각각 실행함으로 이것이 병렬성
여러개의 코어가 병렬 수행하는 것보다 하나의 코어가 여러 프로세스를 처리하는 원리를 이해하는 것이 중요. 시분할 시스템(time sharing sys)
3. 멀티 쓰레드란?
쓰레드(thread)는 프로세스 내의 실행하는 동작 단위, 즉 일꾼인데 stack 영역을 제외하고 , heap,data,code 영역을 공유한다. 멀티 쓰레드면 하나의 process가 동시에 여러개의 일을 수행할 수 있음.
->stack 영역은 독립적으로 갖고 있는 이유?
Stack 영역은 반환 주소(return address) 와 함수 내 지역변수 등을 저장해하는데, thread는 '독립적인 기능을 실행' 즉, '독립적으로 함수를 호출' 함을 의미합니다. 따라서 독립적으로 thread가 작동하기 위해서 stack memory는 각자 갖고 있어야합니다 ^.^
4. 멀티 프로세스 and 멀티 쓰레드
멀티 쓰레드는 context switching이 빠름, 메모리 적게 먹고,
하지만 동기화 문제와 하나의 thread 장애로 전체 thread 종료될 위험 있음
멀티 프로세스는 하나의 process가 죽더라도 다른process에 영향을 안줘서 안정성이 높음
멀티 프로세스로 이용하던 작업을
멀티 쓰레드로 구현하면 쓰레드 간 통신을 이용하게 되는데,
IPC(InterProcessor communication)를 이용한 프로세스 간 통신보다
비용이 줄어 통신으로 인한 오버헤드가 줄어든다.
5. 멀티 프로세스 환경에서 데이터를 주고 받는 방법?
->IPC는 공유 메모리 모델, 메시지 전달 모델로 나눌 수 있다.
공유 메모리 모델 : 공유메모리 POSIX
메커니즘: 주소 공간 일부를 공유하여 메모리 영역에 read/write하여 통신
장점: kernel관여 없어서 속도 빠름.
단점: 여러 프로세스가 동시에 메모리에 접근하면 동기화 과정이 필요하다는 단점이 있음
메시지 전송 모델 : Pipe, Socket, Messaage queue
메커니즘 : kernel을 통해 send/receive 연산을 통해 데이터 전송
장점: kernel에서 제어를 해주기 때문에 안전하며, 동기화를 제공해줌
단점: kernel을 이용하여 통신 속도가 느림
6.멀티 프로세스/쓰레드 환경에서 동기화 문제를 어떻게 해결하는지?
mutex , semaphore
0,1 0,1,2,...n
semaphore값이 0,1만 가지는 경우 binary semaphore 라고 하는데
mutex랑 비슷하게 작동합니다.
mutex는 오직 1개의 process/thread만 접근 가능.
반면 semaphore 는 세마포 변수의 값만큼 접근 가능
7. deadlock(교착상태)
발생조건:
상호 배제(mutual exclusion) 점유 대기(hold and wait) 비선점(non-premeption) 순환 대기(circular wait) 위 4개의 조건이 동시에 성립할 때 발생
해결방안:
무시 , 예방 , 회피 , 회복
ignore, prevention, avoid, recovery
8. Paging 이란 무엇인가요 ? (Memory)
프로세스가 할당받은 메모리 공간을 물리적 메모리를 나누는 기법
9. Segmentation 이란 무엇인가요? (Memory)
프로세스가 할당받은 메모리 공간을 논리적 의미 단위 나누는 기법
10. 가상 메모리란 무엇인가요?
가상 메모리란 프로세스 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 하는 기법
요구 페이징 기법을 토대로 설명하자면..
특정 page에 대해 cpu 요청이 들어 왔을 때 해당page를 메모리에 적재합니다. 당장 실행에 필요한 page만을 메모리에 적재하기 때문에
메모리 사용량 감소, 입출력 오버헤드도 감소
페이지 교체 알고리즘에는 무엇이?
FIFO,최적 페이지 교체, LRU, LFU
LRU(Least Recently Used): 참조된지 가장 오래된 페이지를 교체
LFU(Least Frequently Used):참조횟수가 가장 적은 페이지를 교체