티스토리 뷰

CS

[운영체제] Interview Question for Beginner

Nickolodeon 2023. 9. 21. 19:22

프로세스와 스레드

프로세스는 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 실행중인 프로그램을 말한다.

운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이를 총칭하여 프로세스라고 부른다. 더 구체적으로는 프로세스는 함수 매개 변수와 복귀 주소, 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 갖는 데이터 섹션을 포함한다. 또 동적으로 할당되는 메모리의 영역인 힙을 포함한다.

 

프로세스는 PCB(Process Control Block) 이라고 하는 중요한 정보를 저장해놓는 공간을 갖고 있다. CPU 를 할당 받고 작업하는 도중에 반환해야 하는 상황이 생기면 PCB 에 작업 상황을 저장해놓고 반환한 후에 나중에 CPU 할당 받았을 때 PCB 로부터 작업 상황을 불러와서 다시 재개한다.

 

프로세스가 전체 작업의 흐름을 말한다면, 스레드는 이 흐름 안의 하나 하나 작업 단위를 일컫는다. 스레드가 여러 개 있으면 하나를 관리하기 위해 스레드 하나 전체를 건드리는 관리의 중복 또는 자원을 생성하는 일을 모두 죽이고 다시 할 필요 없기 때문에 효율적으로 할 수 있다. 이를 멀티 스레딩 이라고 부른다. 멀티 스레딩 환경에서 각 스레드는 각자의 스택과 PC 레지스터를 갖고 있다. 그 이유는 다음과 같다.

 

  1. 스택이라는 메모리 공간이 원래 함수의 매개 변수, 함수 내에서 정의되는 변수, 돌아갈 주소값(?) 을 가지고 있는 곳이기 때문에 스택을 독립적으로 갖고 있으면 함수 하나를 독립적으로 호출할 수 있는 것이다. 그러므로 실행의 흐름 내의 하나의 작업인 스레드가 독립적으로 존재하려면 스택을 독립적으로 가지고 있어야 한다.
  2. PC 레지스터에는 Program Counter, 즉 명령어가 어디까지 실행되었는지 포인터가 하나씩 증가하면서 가리키고 있다. 항상 명령이 어디까지 수행되었는지 기억하기 위해 연속적으로 실행 안되는 스레드에는 필요하다.

 

프로세스 대신 멀티 스레딩을 하면 Heap 영역의 공유 자원 또는 전역 변수를 사용하여 스레드 간 통신할 수 있다. 또한 프로세스의 context switch 와는 다르게 캐시 메모리를 초기화할 필요가 없어서 더 작업이 줄어든다. 멀티 프로세스보다 효과적인 방식인 이유다. 하지만 동기화 문제를 고려해야 한다. 그리고 스레드 하나가 종료되면 다른 스레드에도 영향을 미치기 때문에 주의해야 한다.

 

스레드 전환 시 일어나는 컨텍스트 스위칭은 프로세스 간의 컨텍스트 스위칭보다 빠르다.
클라이언트의 요청에 따라 서버는 스레드를 하나 생성한다.

동시성과 병렬성

싱글 프로세서 환경에서 동시성은 스레드를 번갈아가며 수행해서 동시에 일어나는 것처럼 보이게 하는 것을 말한다.

멀티 코어 환경에서 병렬성은 여러 코어가 각 스레드를 동시에 수행하는 것을 말한다.

스레드에는 유저 스레드와 커널 스레드가 있다. 안정성과 성능의 트레이드 오프를 가지고 있다.

동기화

자바 synchronized 키워드

동기화하는 방식이다.

자원이 공유되었을 때 동기화가 되지 않으면 발생할 수 있는 문제 (예) 조건에 맞지 않는데 빠져나오지 않고 우선 실행하는 문제) 가 있기 때문에 사용된다.

그러나 synchronized 는 매우 훌륭한 방법은 아니므로, 자바 5에서는 locks 가 등장했다. 

프로세스 스케줄러

장기 스케줄러

  • 실행중인 프로세스의 수를 결정한다.
  • Job Queue -> Ready Queue 로 가는 프로세스를 결정한다.

단기 스케줄러

  • Ready Queue -> 실행 로 가는 프로세스를 결정한다.

중기 스케줄러

  • Ready Queue -> Job Queue 로 가는 프로세스를 결정한다.

CPU 스케줄러

FCFS(First Come First Served)

  • 먼저 온 프로세스가 소요 시간이 길다면 전체적인 성능에 영향을 미친다.

SJF(Shortest Job First)

  • 극단적으로 CPU burst time 이 짧은 프로세스를 선호하기 때문에 실행 시간이 긴 프로세스는 영원히 실행되지 못할 수 도 있다.

SRTF(Shortest Remaining Time First)

  • 새로 도착한 프로세스가 CPU 사용 시간이 더 짧으면 CPU 를 뺏긴다.

Priority Scheduling

  • 우선순위를 나타내는 정수 값이 낮은 순대로 프로세스를 실행한다.

Round Robin

  • 각 프로세스가 동일한 시간을 할당받는다.
  • 프로세스가 할당받은 시간을 모두 사용하면 멈추고 상태를 저장한 뒤 Ready Queue 의 맨 뒤로 간다.
  • 이 때 할당받는 시간을 잘 설정해야 하는데, 너무 길면 FCFS 와 다를 바 없고 너무 작으면 context switch 가 잦아지기 때문이다.

동기와 비동기

동기는 어떤 메서드를 실행시키면 바로 일처리를 하고 비동기는 큐와 백그라운드 스레드에 일을 위임한다.

 

Blocking I/O vs Non-blocking I/O

blocking I/O, Synchronous I/O

I/O 작업 시 blocking 이 일어나면 blocking I/O, 일어나지 않으면 non-blocking I/O 이다.

그러나 blocking 과 synchronous 는 이벤트를 큐에서 대기하느냐 발생 시 반응하느냐에서 차이가 있다.

 

non-blocking I/O

대기 큐에서 기다리는 동안 발생하는 CPU 의 자원 낭비를 줄이고자 만들어진 방식이다. 데이터를 반환할 수 있든 없든 반환한다. 클라이언트는 polling 을 통해 반환된 값이 찾던 값인지 계속 확인한다. 이 과정에서 확인 요청이 너무 잦으면 CPU 에 과부하가 될 수 있다.

 

Asynchronous I/O

클라이언트가 확인할 필요 없이 kernel level 에서 데이터가 준비되면 애플리케이션에게 notify 해주는 방식이다. 완전한 비동기 방식이라고 할 수 있다.

 

임계 영역

Cirtical Section 이라고 불리며, 프로세스들이 함께 자원을 공유하면 다음과 같은 문제 해결을 할 수 있다.

  1. 상호 배제
  2. 진행
  3. 한정된 대기

뮤텍스와 세마포어

뮤텍스 : lock 을 획득하면 critical section에 다른 프로세스가 진입하지 못하게 하는 것

세마포어 : 가용 자원의 개수로 초기화된 세마포어를 확인하며 프로세스가 실행된다. 계속 진입을 시도하는 비효율이 발생하는데, 이를 한번 진입에 실패하면 block 한 후에 자리가 나면 깨우는 방법으로 해결할 수 있다.

메모리 관리 전략

메모리 관리는 운영체제만 할 수 있다.

Swapping

round-robin 방식에서 프로세스의 상태를 메모리에 기억하기 위해 보조 기억장치로 현재 할당 시간이 끝난 프로세스의 메모리를 내보내고 새롭게 온 프로세스를 메모리에 할당하는 것을 말한다. swapping 은 메모리 공간이 부족할 때 시작된다.

단편화

프로세스에 메모리가 할당되고 제거되는 것이 반복될 때 메모리 내에 작은 틈들이 생기는 것을 말한다. 전체적으로 보면 외부 단편화, 프로세스에게 할당된 메모리 공간 상에서만 보면 내부 단편화이다. 압축을 통해 틈들을 하나로 묶을 수 있다.

페이징

물리 메모리는 frame 으로, 논리 메모리는 page 로 나누는 방식이다. 프로세스의 메모리가 연속성 없이 남는 프레임에 적절히 배치가 되면 페이지를 통해 관리한다. 페이지는 고정 크기이기 때문에 내부 단편화가 커질 수는 있다.

Segmentation

페이징에서처럼 같은 크기가 아니라 다른 크기로 나누는 방식인데, 서로 다른 크기로 계속 조각나다 보니 외부 단편화가 발생할 수도 있다.

가상 메모리

프로세스 전체가 메모리에 없어도 실행 가능하게 하는 것이다.

가상 주소 공간

프로세스 실행에 필요한 스택, 힙, 데이터, 코드 영역의 메모리 크기 외에 요구되는 메모리만큼은 가상 공간에서 제공하고 필요 시에만 물리 메모리에서 가져오게 함으로서 메모리를 절약할 수 있다.

페이지 공유

프로세스들은 가상 메모리를 통해 메모리를 공유할 수 있다.

요구 페이징

모든 페이지를 적재하지 않고 필요한 페이지만 가져온다.

페이지 교체

만약 필요한 페이지가 있는데 물리 메모리가 가득 차있어서 가져올 수 없다면, 물리메모리에서 하나를 지우고 필요한 페이지를 가져와야 한다.

  • FIFO: 가장 먼저 저장된 페이지가 나간다. 초기에 저장되었다고 안 중요하다는 것은 아니라 문제가 발생할 수 있다. 오래된 만큼 활발하게 사용되고 있을 수도 있다.
  • 최적 페이지 교체: 앞으로 안 사용될 페이지를 예측해서 지운다. 예측이 어렵다.
  • LRU: 가장 예전에 사용된 페이지를 지운다.
  • LFU: 활발하게 사용하지 않는 페이지를 지운다. 활발하게 안 사용하다가 나중에 활발하게 사용할 수도 있다는 문제가 있다.
  • MFU: 덜 사용되었을 수록 앞으로 사용될 일이 많다는 가정에서 만들어진 알고리즘이다.

캐시의 지역성

캐시의 지역성 원리

캐시의 적중율을 높이기 위해 사용하는 원리이다. 데이터의 접근이 균일하게 이루어지지 않고 한번에 몰아서 한 지역에 국한되어서 접근이 이루어진다는 사실에 기반한 원리이다.

  • 시간 지역성: 최근에 참조되었으면 곧 다시 참조된다.
  • 공간 지역성: 실제 참조된 주소와 인접한 주소가 다시 참조된다.

Caching line

캐시에 저장된 데이터는 한번에 가져올 수 있어야 의미가 있다. 그래서 묶음 형태로 캐시 내에 데이터를 저장하는데 이때 묶음의 형태를 Caching line 이라고 부른다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함