개발놀이터

여태까지 공부한 운영체제 질문 / 답변 본문

CS 지식/면접준비

여태까지 공부한 운영체제 질문 / 답변

마늘냄새폴폴 2023. 5. 5. 19:27

https://coding-review.tistory.com/346

 

여태까지 공부한 네트워크 면접질문 / 답변

https://coding-review.tistory.com/345 여태까지 공부한 데이터베이스 면접질문 / 답변 https://coding-review.tistory.com/344 여태까지 공부한 Spring 면접질문 / 답변 https://coding-review.tistory.com/343 여태까지 공부한 Jav

coding-review.tistory.com

앞선 포스팅과 이어집니다.

 

70. 프로스세와 스레드에 대해서 설명해주세요. 
프로세스는 컴퓨터가 연속적으로 실행하는 프로그램이고 스레드는 프로세스 안에서 실행되는 흐름의 단위입니다. 프로세스는 고유한 주소와 데이터 공간을 할당받고 독립적입니다. 하지만 스레드는 프로세스 안에서 자원을 공유하기 때문에 논리적으로 연결되어있습니다. 때문에 스레드는 프로세스에 포함된 개념이고 경량화된 프로세스라고 할 수 있습니다. 

71. 멀티스레딩에 대해서 설명해주세요. 
멀티스레딩은 하나의 프로세스에서 여러개의 스레드를 이용해 자원의 생성 혹은 관리의 중복을 최소화하기위한 프로그래밍 방식입니다. 멀티스레딩은 멀티프로세싱에 비해 소모되는 자원이 적고 힙 영역에서 스레드간 통신을 할 수 있어서 프로세스간 통신보다 저렴하고 간단하다는 장점이 있습니다. 하지만 힙 영역에서 공유된 자원에 접근할 때는 동기화 작업을 반드시 거쳐야하고 이때 락을 무분별하게 사용할 경우 성능상 악영향을 미칠 수 있습니다. 

72. Thread-safe 하다는 것의 정의와 구현 방법에 대해서 설명해주세요. 
스레드 세이프 하다는 것은 여러개의 스레드가 공유자원에 접근할 때 연산결과의 정합성을 보장하기위해 메모리 가시성이 확보된 상태를 말합니다. 스레드 세이프를 구현하기 위해서는 불변객체를 사용하거나, java.util.concurrent 클래스를 사용하거나, ThreadLocal을 사용하거나, synchronized 키워드를 사용하거나, final 변수를 사용하여서 구현할 수 있습니다. 

73. 프로세스 동기화에 대해서 설명해주세요. 
프로세스 동기화는 하나의 프로세스가 하나의 자원에 접근할 수 있도록 하는 것입니다. 프로세스에는 Critical Seciton이라고 부르는 임계영역이 하나씩 존재합니다. 하나의 프로세스가 임계구역에서 작업하고 있는 동안에는 다른 프로세스가 그들의 임계구역으로 접근할 수 없습니다. 임계구역으로 접근을 제어하기 위해서 뮤텍스와 세마포어와 같은 매커니즘을 사용합니다. 이런 임계구역 문제는 여러 프로세스 혹은 스레드가 동기화 매커니즘을 거치지 않고 공유자원에 접근하려는 race condition을 해결하기위한 해결책으로서 사용될 수 있습니다. 임계 구역 문제를 해결하기 위해서는 하나의 프로세스가 임계구역에서 작업을 하고있다면 다른 프로세스는 들어오지 못하게 막는 mutual exclusion, 만약 임계구역에 프로세스가 없다면 임계구역으로 진입하려는 프로세스를 적절히 선택해 진입을 하도록하는 progress, 어떤 프로세스가 임계구역으로 접근을 요청한 경우 다음 프로세스가 임계구역으로의 접근을 요청하는 횟수를 유한하게 제한하는 bounded wating이 있습니다. 

74. 교착상태와 기아상태에 대해서 설명해주세요. 
교착상태는 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고있는 상태를 말합니다. 교착상태가 발생하기 위해서는 하나의 프로세스만 하나의 자원에 접근할 수 있는 상호배제, 이미 자원이 할당된 상태에서 다른 자원을 기다리고 있는 점유 대기, 다른 프로세스의 자원을 자원이 해제되기 전까지 뺏을 수 없는 비선점, 서로 다른 프로세스가 순환적으로 다른 프로세스가 요구하는 자원을 기다리고 있는 상태인 순환 대기가 있습니다. 교착상태를 해결하기 위해서는 앞서 설명한 네가지 조건 중 하나라도 만족하지 않도록 예방하는 방법과, 알고리즘을 이용해 회피하는 방법, 알고리즘으로 감지한 다음 회복하는 방법, 교착상태가 극히 드물게 일어나는 경우 무시하는 방법이 있습니다. 기아상태는 서로 다른 프로세스가 부족한 자원을 가지고 경쟁할 때 특정 프로세스가 자원을 영원히 할당받지 못하는 상태를 말합니다. 기아 상태를 해결하기 위해서는 프로세스의 우선순위를 바꿔주거나, 오래기다린 프로세스의 우선순위를 높여주거나, PriorityQueue와 같은 스케쥴링 알고리즘을 사용하는 방법이 있습니다. 

75. 뮤텍스와 세마포어의 차이에 대해서 설명해주세요. 
뮤텍스는 locking mechanism이고 세마포어는 signaling mechanism입니다. 뮤텍스와 세마포어는 식당에 있는 화장실로 설명할 수 있습니다. 뮤텍스의 경우 식당에 화장실이 한개만 존재하고 화장실에 가기 위해서는 열쇠가 필요한 경우입니다. 만약 어떤 사람이 화장실에 가고싶은 경우 키를 가지고 화장실에 들어갈 수 있으며 이후에 화장실에 들어가고 싶은 사람은 앞서 들어간 사람이 나올 때까지 기다려야합니다. 화장실에 가고싶은 사람이 많더라도 화장실에 가기위해 줄을 서야하고 먼저 선 사람이 화장실에 빨리 갈 수 있습니다. 세마포어는 화장실이 여러개이고 화장실 밖에 전광판이 있는 모습을 상상할 수 있습니다. 화장실이 만약 세개라면 전광판에는 3이라는 숫자가 적히게 됩니다. 만약 화장실에 한명이 들어가는 경우 전광판의 숫자가 2로 줄어들고 한명 더 들어가면 1로 줄어듭니다. 이때 화장실에서 한명이 나오게 되면 다시 2로 올라가게 됩니다. 화장실에 모두 사람이 들어가있어서 전광판에 숫자가 0이 되는 경우 화장실에 가기 위해서는 화장실 밖에서 기다려야합니다. 

76. 동기, 비동기와 블로킹, 논블로킹의 차이
동기, 비동기 프로그래밍은 클라이언트와 서버가 서로 통신할 때 요청과 응답이 하나의 스레드에 묶여 요청을 보내면 그에 상응하는 응답이 올 때까지 기다려야한다는 특징입니다. 그리고 블로킹, 논블로킹은 여러개의 프로그램이나 프로세스 혹은 스레드가 어떤 자원에 접근할 때 자원의 접근을 blocking하냐 blocking하지 않느냐를 정하는 아키텍처입니다.