[기술면접] 운영체제

고지훈·2021년 12월 14일
0

LearningRecord

목록 보기
10/17
post-thumbnail

운영체제

[프로세스와 스레드의 차이]
프로세스는 실행중인 프로그램을 의미한다. 스레드는 실행 제어만 분리한 것을 의미한다.

프로세스는 운영체제로부터 자원을 할당받지만, 스레드는 프로세스로부터 자원을 할당받고 프로세스의 코드/데이터/힙영역을 공유하기 때문에 좀 더 효율적으로 통신할 수 있다. 또한 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되는 스레드쪽이 빠르다. 스레드는 자원 공유로 인한 문제가 발생할 수 있으니 이를 염두한 프로그래밍을 해야한다.

한 프로세스 안에 여러 개의 스레드가 생성될 수 있다.

[컨텍스트 스위칭]
컨텍스트 스위칭은 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법이다.

인터럽트가 발생ㅎ하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작한다. 이 때, CPU는 아무런 일을 하지 않으므로 잦은 컨텍스트 스위칭은 성능저하를 일으킬 수 있다.

스레드는 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비워야하는 내용도 적기 때문에 상대적으로 더 빠른 컨텍스트 스위칭이 일어날 수 있다.

[동기와 비동기의 차이]
동기 방식은 메서드 리턴과 결과를 전달받는 시간이 일치하는 명령 실행 방식이다. 동기 방식은 한 함수가 끝나는 시간과 바로 다음 함수가 시작하는 시간이 같다.

비동기 방식은 여러 개의 처리가 함께 실행되는 방식으로, 동기 방식에 비해 단위시간 당 많은 작업을 처리할 수 있다. 단 CPU나 메모리를 많이 사용해야하는 작업을 비동기로 처리하게되면 과부하가 걸릴 수 있다. 프로그램의 복잡도 또한 증가하게 된다.

[블로킹과 논블로킹]
동기와 비동기와는 다른 관점으로 내가 직접 제어할 수 없는 대상을 상대하는 방법에 대한 분류다.

블로킹 방식은 대상의 작업이 끝날 때까지 제어권을 대상이 가지고 있는 것을 의미한다. 반면에 논블로킹은 대상의 작업 완료여부와 상관없이 새로운 작업을 수행한다.

동기와 논블로킹은 계속해서 polling을 수행하기 때문에 컨텍스트 스위칭이 지속적으로 발생해 지연이 발생한다.

[멀티스레드 프로그래밍에 대한 설명]
멀티스레드 프로그래밍은 하나의 프로세스에서 여러 개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것을 멀티스레드 프로그래밍이라한다.

장점

  • 멀티 프로세스에 비해 메모리 자원소모가 줄어든다.
  • 힙 영역을 통해서 스레드간 통신이 가능해서 프로세스간 통신보다 간단하다.
  • 스레드의 컨텍스트 스위칭은 프로세스의 컨텍스트 스위칭보다 빠르다.

단점

  • 힙 영역에 있는 자원을 사용할 때 동기화를 해야한다.
  • 동기화를 위해서 락을 과도하게 사용하면 성능이 저하될 수 있다.
  • 하나의 스레드가 비정상적으로 동작하면 다른 스레드도 종료될 수 있다.

[Thread-safe]
두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산 결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 의미한다.

[프로세스 동기화]
다중 프로세스 환경에서 자원등에 한 프로세스만 접근가능하도록 하는 것이다.

프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재하기 때문에 주의해야한다.

[교착상태와 기아상태의 해결방법]
교착상태: 서로 다른 프로세스가 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태를 의미한다.

발생조건

  • 상호 배제: 한 번에 한 프로세스만 해당 자원을 사용할 수 있어야 한다.
  • 점유 대기: 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
  • 비선점: 다른 프로세스가 자원의 사용을 끝날 때 까지 자원을 뺏을 수 없다.
  • 순환 대기: 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

해결방법

  • 예방: 4가지 조건 중 하나라도 만족되지 않도록 한다.
  • 회피: 데드락이 발생하지 않도록 한다.
  • 회복: 교착상태가 발생할 때, 해결한다.
  • 무시: 회복과정의 성능저하가 심하다면 무시한다.

기아상태: 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스가 영원히 자원 할당이 되지 않는 경우

해결방법

  • 우선순위를 변경한다.(우선순위를 수시로 변경하거나, 오래 기다린 프로세스의 우선순위를 높여준다.)

[세마포어와 뮤텍스의 차이]
세마포어는 여러 개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고, 뮤텍스가 될 수 있지만 뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식이다. 따라서 뮤텍스는 세마포어가 될 수 없다.

세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있다.

[가상 메모리]
실제 메모리에서 공간이 부족한 경우 보조 기억 장치에서 임시로 사용하는 영역

실제 메모리가 아니기때문에 지연시간이 많이 발생하며, 가급적이면 SWAP메모리를 사용하지 않도록 설계하는 것이 좋고, 만약 계속해서 사용하는 양이 증가한다면 메모리 누수를 의심해야한다.

[캐시의 지역성]
시간 지역성과 공간 지역성으로 나눌 수 있으며 시간 지역성은 최근에 접근한 데이터에 다시 접근하는 경향을 의미하고, 공간 지역성은 최근 접근한 데이터의 주변 공간에 다시 접근 경향을 의미한다.

[프로세스 관련 용어]

  • PCB: 프로세스 제어 블록, 프로세스에 대한 중요한 정보를 저장한다.
  • PC: 프로그램 카운터, 프로세스 실행을 위한 다음 명령의 주소를 표시한다.
  • 캐시메모리: 자주 사용되는 데이터가 저장되는 공간으로 CPU의 레지스터와 메모리 사이에서 병목 현상을 완화하는 장치이다.
profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글