매일 진행하는 스터디의 2주차 주제는 운영체제 였는데 운영체제 내부의 다양한 기술적인 이야기는 스터디원들이 이야기 해줄 것 같아서 면접에서 물어볼 만한 os 질문들을 모아 봤다.
발표자료는 https://www.slideshare.net/ssuser4913c5/os-question-232351266 위의 링크에서 볼 수 있다.
설명에 사용된 용어의 간단한 뜻을 괄호 안에 배치해 둘 예정이다.
프로세스: 실행되고 있는 프로그램(어떤 작업을 위해 실행 할 수 있는 파일들), 메모리에 올라와 실행되고 있는 인스턴스(프로그램의 실체)
스레드: 프로세스 내의 실행되는 흐름의 단위
간단한 예시로 설명하자면 멀티프로세스는 문서작업을 할 때 여러개의 문서 프로그램을 켜두는 것이고, 멀티 스레드는 문서 프로그램내에서 새로운 문서창을 띄우는 것으로 이해 할 수 있다. 따라서 운영체제가 받는 부담이 확 줄어들게 된다.
이유를 크게 두가지로 설명하자면
여러 프로세스를 생성하고 할당하는등의 시스템 콜(커널영역의 기능을 사용자 영역에서 사용가능 하게 하는 작업)이 줄어든다.
스레드는 프로세스내의 메모리를 공유하므로 스레드간 데이터 공유가 쉽다는 장점이있다.
스레드 간 통신은 stack 제외 모든 메모리를 공유하기 때문에 프로세스 간 통신보다, 스레드 간의 통신이 비용이 적게 소모된다.
프로세스간의 전환보다 스레드간의 전환이 더 빠르게 일어난다.
교착상태: 모든 작업이 각 작업의 락(공유자원을 잡고 있는 상황)이 풀리길 기다리는 상황
공유자원의 사용은 한번에 한 프로세스만 사용가능하다. 여러 프로세스가 접근 할 수 없다.
공유자원에 접근중이 한 프로세스가 접근해제를 하지 않고 다른 자원에 접근하려고 기다린다.
한 프로세스가 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
네가지의 조건 중 하나라도 만족하지 않는다면 교착상태는 일어나지 않는다.
동기는 요청을 보낸 후 응답을 받아야지만 다음 동작을 실행한다.
예시를 들자면 세탁기를 사용할 때 10개의 세탁기가 있다고 가정해보면 한 세탁기에
- 옷 넣고
- 세제넣고
- 돌리고
의 작업이 끝나야 다음 세탁기를 시작할 수 있다.
비동기는 요청을 보낸 후 응답에 상관없이 다음 동작을 실행할 수 있다.
세탁기 사용을 할 때 굳이 한 세탁기의 작업이 끝나고 실행 하는 것이 아니라
- 옷 넣고
다른 세탁기 옷 넣고
다른 세탁기 옷 넣고- 세제넣고
다른 세탁기 세제 넣고
다른 세탁기 세제 넣고- 돌리고
다른 세탁기 돌리고
다른 세탁기 돌리고
가 가능하기 때문에 조금 더 빠르게 일을 처리할 수 있다.
뮤텍스: 공유된 자원을 여러 스레드가 접근 하려고 하는 것을 막는다.
세마포어: 공유된 자원을 여러 프로세스가 접근 하려고 하는 것을 막는다.