반응형

이 게시물은 다음 링크를 참조하여 학습했습니다.

 

GitHub - WeareSoft/tech-interview: 🙍 tech interview

:loudspeaker:🙍 tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.

github.com

프로세스 VS 스레드

프로세스(process) : 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(작업의 단위)

-특징

(1) 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다.

(2) 프로세스당 최소 1개의 스레드(메인스레드) 보유

(3) 프로세스끼리는 독립적 다른 프로세스에 접근 불가, 접근하려면 통신 해야함

 

프로세스 제어 블록(Process Control Block, PCB) : 프로세스에 대한 정보를 저장하는 OS의 자료구조

 

스레드(thread) : 프로그램 내에서 실행되는 흐름의 단위(실행의 단위)

-특징

(1) 프로세스 내에서 Stack만 할당받고, Code, Data, Heap은 공유

 

멀티 프로세스 VS 멀티 스레드

멀티 프로세스 대신 멀티 스레드를 사용하는 이유

쉽게 설명하면, 프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이다

멀티 스레드는 자원을 공유하므로 효율적이며, 처리비용, 응답시간이 적게 든다.

, 교착상태를 발생시킬 수 있으므로 동기화에 주의해야 한다.

 

교착상태(DeadLock)

두 개 이상의 프로세스나 스레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태

-교착상태의 필요조건

(1) 상호 배제 : 한 자원에 대한 여러 프로세스의 동시접근 불가능. 하나의 자원을 특정시기에 하나의 프로세스나 스레드만 소유할 수 있는 상태

(2) 점유와 대기 : 하나의 자원을 소유하고 다른 프로세스 혹은 스레드의 자원을 요청하는 상태

(3) 비선점 : 하나의 프로세스나 스레드에게 주어진 자원은 해당 프로세스나 스레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태. , 다른 프로세스에서 자원을 사용하는 동안 자원을 강제로 가져올 수 없다.

(4) 환형 대기 : 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있는 것을 말한다.

ex) A -> B, B -> C, C -> A

 

Thread-safe : 멀티스레드 환경에서 여려 스레드가 동시에 하나의 객체 및 변수(공유 자원)에 접근할 때, 의도한 대로 동작하는 것(ex) “Thread-safe하다

 

-Thread-safe한 구현을 위해 동기화 기법( -> 상호배제) 사용

-동기화 기법으로 Mutex, Semaphore 등이 있다.

-Reentrant(재진입성) : 어떤 함수에 여러 스레드가 동시에 접근해도 언제나 같은 실행 결과 보장

=> 공유자원 사용 X 로 구현

 

동기화

동기화 객체의 종류

-스레드 동기화 방법

(1) 실행 순서의 동기화

(2) 메모리 접근에 대한 동기화

-동기화 기법의 종류

(1) 유저 모드 동기화

커널의 힘을 빌리지 않는(커널 코드가 실행되지 않는) 동기화 기법

성능상 이점, 기능상의 제한

Ex) 크리티컬 섹션 기반의 동기화, 인터락 함수 기반의 동기화

(2) 커널 모드 동기화

커널에서 제공하는 동기화 기능을 활용하는 방법

커널 모드로의 변경이 필요하고 이는 성능 저하로 이어짐, 다양한 기능 활용 가능

Ex) 뮤텍스 기반의 동기화, 세마포어 기반의 동기화, 이름있는 뮤텍스 기반의 프로세스 동기화, 이벤트 기반의 동기화

 

Critical Section(임계영역) : 동일한 자원을 동시에 접근하는 작업을 실행하는 코드영역

 

뮤텍스 vs 세마포어 -> 커널 객체

프로세스 혹은 스레드간의 통신시에 하나의 자원에 두 개 이상의 프로세스 or 스레드가 접근하는 경우 문제 발생.

이를 제어하기 위해 스레드 -> 뮤텍스, 프로세스 -> 세마포어 사용

 

 

뮤텍스와 세마포어의 차이

뮤텍스 : 상호배제라고도 하며, Critical Section을 가진 스레드의 Running Time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술. 뮤텍스는 0, 1 로 구성된 이진 세마포어

==> Critical Section은 한 프로세스 내의 스레드 사이에서만 동기화가 가능한 반면,

뮤텍스는 여러 프로세스의 스레드 사이에서 동기화가 가능

 

세마포어 : 사용중인 리소스를 잠그는 데 사용되는 보호된 변수 또는 추상 데이터 유형. 공유된 자원 데이터를 여러 프로세스에서 접근하는 것을 막는다. 세마포어의 값은 공통 자원의 상태를 나타냄. 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있다.

 

-> 가장 큰 차이점은 동기화 대상의 개수. 뮤텍스는 동기화 대상이 하나, 세마포어는 동기화 대상이 하나 이상.

 

메모리

프로그램의 메모리

코드 : 실행할 프로그램의 코드가 저장되는 텍스트 영역

데이터 : 전역변수와 정적변수가 이에 해당된다. 프로그램의 시작과 함께 할당, 종료와 함께 소멸

스택 : 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역. 함수의 호출과 함께 할당, 종료와 함께 소멸

: 사용자가 직접 관리할 수 있는 메모리 영역. 동적 메모리 할당

 

Physical Address vs Logical Address

Logical Address(=virtual address)

프로세스마다 독립적으로 가지는 주소 공간

CPU가 보는 주소는 Logical address

-> CPU는 매 순간 기계어를 실행하는데, 기계어 하나하나에 보이는 주소는 논리적 주소

 

Physical Address

-메모리에 실제 올라가는 위치

 

메모리 관리 : ProcessLogical address만 보기 때문에 연속된 address를 사용하는 것으로 느끼지만 실제 Physical memory는 분할 되어있고 이를 관리하는게 메모리 관리이다.

 

Address binding : 논리적 주소를 물리적 주소로 바꿔주는 것

compile time binding

=> 물리적 메모리 주소가 컴파일 시 알려짐

load time binding

=> Loader의 책임하에 물리적 메모리 주소 부여

execution time binding

=> 수행이 시작된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있음

 

페이지(Page)

물리적 주소공간을 고정된 사이즈의 Block으로 나눈 것을 Frame이라 한다.

논리적 주소공간을 고정된 사이즈의 Block으로 나눈 것을 Page라 한다.

 

단편화(Fragmentation)

- 외부 단편화(External Fragmentation) : 프로세스를 연속적으로 배치(*contiguous allocation)할 때, 총 공간을 계산해봤을 때 요청을 만족할만한 충분한 메모리가 있음에도, 가능한 공간들이 연속적이지 않을 때(hole 발생)

- 내부 단편화(Internal Fragmentation) : 프로세스가 페이지로 딱 나눠 떨어지지 않을 때 발생

 

세그먼테이션(Segmentation) : 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할 배치

 

페이징(Paging) : AddressBlock으로 나눈 Frame, Page를 이용하여 분할된 사이즈로 배치

 

가상 메모리(Virtual Memory) : 프로세스 전체가 메모리 내에 올라오지 않더라고 실행 가능하도록 하는 기법

 

요구 페이징(Demand Paging) : 프로그램 실행 시작시에 초기에 필요한 것들만 적재하는 전략

-> 원하는 페이지를 메모리에 적재, 메모리가 모두 사용중일 때 page fault -> 페이지 교체 알고리즘

 

스케줄러

Job Queue, Ready Queue, Device Queue 세 가지 존재

장기 스케줄러

Job Pool에서 프로세스들을 선별하고 실행을 위한 메모리에 적재(Ready Queue)

메모리와 디스크 사이의 스케줄링 담당

프로세스 상태 : new -> ready(in memory)

 

단기 스케줄러

준비 대기열(Ready Queue)에서 프로세스를 선택하고 CPU를 할당

메모리와 CPU 사이의 스케줄링 담당

프로세스 상태 : ready -> running -> waiting -> ready

 

중기 스케줄러

너무 많은 프로세스가 적재되면 입출력이 과다해져서 시스템이 멈춘다. 이를 예방하기 위해 프로세스를 메모리에서 디스크로 보내고,(swap-out), 메모리에 여유가 생기면 다시 적재(swap-in)한다

프로세스의 상태 : ready -> suspended

suspended : 외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태를 의미

 

CPU Scheduling

프로세스들에게 CPU 등의 자원 배정을 적절히 함으로서 시스템의 성능을 개선할 수 있다.

**https://m.blog.naver.com/scw0531/221417295183

비선점(Non-Pre-emptive) vs 선점(Pre-emptive)

비선점 스케줄링 : 어떤 프로세스가 CPU를 할당 받으면 그 프로세스가 중지 될 때 까지 실행 보장(은행)

1. FCFS(First-Come, First Served) 스케줄링

- 도착한 순서대로 처리(일괄처리)

2. SJF(Shortest-Job-First) 스케줄링

- 가장 짧은 소요시간의 프로세스 실행(* 기아상태(Starvation) 발생)

3. HRN(Highest Response ratio Next) 스케줄링

긴 작업과 짧은 작업의 공정성을 고려,

Response Ratio가 높은 것 선택( 대기시간 + 서비스 시간) / 서비스 시간 )

 

선점 스케줄링 : 어떤 프로세스가 CPU를 할당받아 실행 중에 있어도 다른 프로세스가 실행 중인 프로세스를 중지하고 CPU를 강제 점유 가능(응급실)

1. RR(Round-Robin) 스케줄링

시간을 쪼개서 프로세스 진행(시분할 시스템), 할당 시간이 중요 -> 할당 시간이 크면 FCFS에 가까워짐

2. SRT(Shortest Remaining TIme first) 스케줄링

대기 큐의 가장 짧은 소요시간의 Process 선택(SJF중 하나 느낌), 평균 대기시간을 최소화

3. 다단계 큐(Multilevel Queue) 스케줄링

커널 내의 준비 큐를 여러 개의 큐로 분리하여 우선순위 부여

4. 다단계 피드백 큐(Multilevel Feedback Queue) 스케줄링

다단계 큐의 보완버전, 다단계 큐는 하나의 큐에 영구적 할당이지만 다단계 피드백 큐는 큐를 갈아탈 수 있다.

 

기아상태(Starvation)

- 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태.

 

- 에이징(Aging)

기아 상태를 예방하기 위한 기술

우선순위가 낮아서 무한정 기다리게 되는 경우, 한번 양보하거나 기다린 시간에 비례 우선순위를 증가 -> 자원을 할당받도록 한다.

 

Dispatcher

CPU의 제어권을 CPU Scheduler에 의해 선택된 프로세스에게 넘긴다.

CPU스케줄러 내부에 포함된 것으로, 단기 스케줄러가 선택한 프로세스에 실질적으로 프로세서를 할당

 

**https://blog.naver.com/dodnam/222098117857

**https://cocoon1787.tistory.com/125

**https://zzsza.github.io/development/2018/07/29/cpu-scheduling-and-process/

**https://ko.wikipedia.org/wiki/%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81_(%EC%BB%B4%ED%93%A8%ED%8C%85)

**디스패처 https://velog.io/@ss-won/OS-CPU-Scheduler%EC%99%80-Dispatcher

 

 

Context Switching

- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말한다.

Process vs Thread : ThreadStack 영역을 제외한 모든 메모리를 공유하므로 Context Switching 비용이 적게 든다.

 

Context Switching 과정

1) Task의 대부분 정보는 Register에 저장되고 PCB(Process Control Block)로 관리된다.

2) 현재 실행하고 있는 TaskPCB 정보를 저장한다. (Process Stack, Ready Queue)

3) 다음 실행할 TaskPCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있다.

 

Context Switching Interrupt

Context SwitchingInterrupt가 발생해야 일어난다

1) I/O request(입출력 요청할 때)

2) time slice expired(CPU 사용시간이 만료 되었을 때)

3) fork a child(자식 프로세스를 만들 때)

4) wait for an interrupt(인터럽트 처리를 기다릴 때)

 

Swapping

프로세스가 메모리에서 뒤(HW or SSD)로 빠지거나 다시 메모리로 돌아오는 과정

 

동기(Sync) vs 비동기(Async)

동기는 하나의 작업을 수행 한 후 다른 작업을 수행

비동기는 여러개의 동기를 동시에 수행 가능(스레드)

 

소켓

소켓은 두 응용 프로그램을 연결하는 데 사용된다. 연결의 끝점

 

커널

컴퓨터의 OS의 핵심. 시스템의 모든 것을 통제함

보안, 자원관리, 추상화 역할

 

캐시의 지역성

범용 메모리인 캐시에서 자주 사용되는 데이터들을 가까이에 위치하기 위한 개념

시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성

공간 지역성 : 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

 

캐싱 라인(Caching Line)

자주 사용하는 데이터들의 주소 값을 기록해둔 태그 묶음

 
반응형

'CS' 카테고리의 다른 글

DB(DataBase)  (0) 2022.01.21
Network  (0) 2022.01.21

+ Recent posts