학교수업, CS/운영체제

[발표자료]멀티 스레드 VS 멀티 프로세스

빨대도둑 2023. 5. 15. 13:45

구분

운영체제의 내용을 크게 4개의 파트로 구분할 수 있었습니다.

나눈 기준은 기술 면접 부분을 통해서 각 파트가 서로 얼마나 연결되어 있는지 관련도를 중심으로 나누었습니다.

보시는 바와 같이 멀티스레드와 멀티프로세스를 비교하는 부분, cpu스케줄링 부분, 세모포어와 뮤텍스를 비교하는 부분, 페이징과 세그먼테이션을 비교하는 부분으로 나눌 수 있었습니다.

여기에서 세부적으로 구분한다면 멀티스레드와 멀티프로세스 비교 부분 안에 cpu 작동방식과 문맥교환, 프로세스 상태 변화, 시분할 시스템에 관한 내용을 포함할 수 있고, 세마포어와 뮤텍스를 비교하는 내용안에는 교착상태와 임계구역에 관한 내용을 포함할 수 있습니다. 마지막으로 페이징과 세그먼테이션을 비교하는 부분 안에서는 가상메모리를 어떻게 할당 하는지와 메모리 오버레이, 조각 모음에 대한 내용을 담을 수 있었습니다.

그래서 아마 4부 또는 5부의 시리즈 형식으로 업로드 될 예정입니다. 

사용이유

그러면 우리는 왜 운영체제를 사용할 까요?

혹시 여기서 vim을 사용해 본 사람 있을까요? 있다면 사용하는데 적지 않은 불편함을 경험한 적이 있을 겁니다. 그리고 저희가 힘들게 만든 파일이 예를 들어서 논문과 같은 파일이 프로그램의 잘못된 접근으로 데이터가 전부 날라간다면 아깝지 않겠습니까? 또한 다른 사람들이 인위적으로 데이터에 접근해서 논문 자료를 전부다 날려버려서 대학원 졸업을 하지 못하게 한다면 슬프지 않겠습니까? 이처럼 응용프로그램이 자원에 직접 접근해서 자원이 무질서하게 관리되는 것을 방지하기 위해서 운영체제를 사용합니다. 아 그리고 자원은 메모리를 의미합니다. RAMROM과 같은 메모리 영역입니다.

운영체제 구성

운영체제는 크게 2가지 부분으로 나눌 수 있습니다. 바로 커널 영역과 사용자 영역으로 구분할 수 있습니다. 커널 영역은 흔히 윈도우, , 리눅스와 같은 핵심 파일이 설치되는 영역입니다. 반면 사용자 영역은 보시는 바와 같이 카카오톡, 크롬, 디스 코드와 같은 프로그램이 설치되는 영역입니다.

아마도 여기 있는 분들이 직접 윈도우를 컴퓨터에 설치해본 경험이 있을 겁니다. 그때 C드라이브에 윈도우 파일만 설치하고 나머지 파일들을 D드라이브에 설치하는 것으로 생각해보면, C드라이브는 커널 영역이 되는 것이고 D드라이브는 사용자 영역이 되는 것입니다.

프로세스란

우리는 크롬과 같은 프로그램이 자원에서 작동하는 것을 프로세스라고 합니다. 정확하게 이야기하면 실행 파일이 메모리에 적재될 때, 해당 프로그램이 프로세스로 바뀝니다. 또한 멀티 프로세스는 프로그램이 많이 돌아가는 것입니다. 윈도우 작업관리자에서 자세히 보기를 누르면 실행중인 프로세스가 등장하는데 이 프로세스가 바로 제가 설명하고 있는 이 개념입니다. 그러면 스레드는 프로세스를 잘게 나눈 과정 즉 스레드가 모여서 하나의 프로세스가 됩니다. 즉 스레드는 하나하나의 기능입니다. 컴퓨터가 작동할 때 마우스가 움직이는 것, 인터넷이 켜지는 것 하나하나의 행동이 스레드입니다.

프로세스 VS 스레드

쉬운 이해를 위해서 크롬과 인터넷 익스플로러를 예제로 사용하겠습니다.

참고로 크롬은 멀티프로세스로 동작하며 인터넷 익스플로러는 서비스 종료되었지만 멀티 스레드 방식으로 동작했습니다. 크롬을 생각해보면 하나의 창에서 오류가 발생을 하더라도 다른 창에 영향이 가지 않아서 오류가 발생한 창만 닫으면 해결됐습니다. 그래서 예전 포탈에서 수강신청을 할 때 크롬을 많이 사용 했었던 것을 생각하면 됩니다. 수강신청 하는데 작동이 멈추면 큰일나지 않습니까? 하지만 IE를 생각해보면 하나의 창이 멈추면 나머지 창 또한 전부 멈추게 되어서 프로그램을 종료시켰다가 다시 실행시켰어야 합니다. 마찬가지로 이를 수강신청 상황에 대입을 하면 미래가 어지러운 상황이 등장하게 됩니다.

여기서 왜 이러한 상황이 발생했을까 생각을 해보면 크롬과 같은 멀티 프로세스는 서로 간의 연결력이 약하기 때문에 영향력이 적습니다. 하지만 IE와 같은 멀티 스레드 형식은 서로 간의 연결력이 강하기 때문에 서로 주고받는 영향이 큽니다. 그래서 이와 같은 상황이 발생했던 것입니다.

시분할 시스템

또한 우리는 컴퓨터를 사용하면서 하나의 프로그램만 사용하지 않지 않습니까? 예전 코로나 시국에 강의를 들을 때 웹엑스를 켜놓고 음소거 처리를 한다음에 롤을 켜서 게임을 하거나 유튜브, 넷플리스를 동시에 봤던 경험이 다들 있지 않습니까? 이처럼 우리는 동시에 여러가지 프로그램을 사용합니다. 이것을 시분할 시스템이라는 것을 사용하기 때문에 가능한 것입니다.

 

시분할시스템에 대한 설명을 하면 cpu는 동작하는 프로그램을 잘게 나누어서 이쪽에 왔다가 저쪽에 왔다가 하면서 프로그램을 동작합니다. 그러면 짧은 시간에 빠르게 왔다 갔다 함으로써 동시에 작동하는 것처럼 보이게 하는 것입니다. 쉽게 이야기하면 이처럼 사진처럼 보이는 필름이 영사기에 들어가서 돌아가면 영상처럼 보이는 것을 생각하면 됩니다. 각각의 프로그램이 서로 번가락하면서 작동하기 때문에 동시에 작동할 수 있게 보이는 것입니다.

그러면 멀티 프로세스란 무엇일까요? 바로 프로그램이 많이 동작하는 것을 이야기합니다. 컴퓨터는 여러 개의 프로세스 즉 여러 개의 프로그램이 서로 협력적으로 일을 하는데 그렇기 때문에 자원의 공간을 많이 차지합니다. 운영체제에서 자원을 많이 차지한다는 것은 효율적이지 않다는 이야기입니다. 그래서 이를 해결하기 위해서 멀티 스레드라는 개념이 등장을 한 것입니다.

 

위에서 예를 들었던 IE를 다시 소환해 봅시다. 이처럼 공유되는 자원인 힙, 데이터, 코드 영역을 제외하고 나머지 부분인 스택 영역만 교체하는 것이 바로 멀티 스레드입니다. 공통된 부분은 공유하고 그렇지 않은 부분만 바꾸기 때문에 효율성이 좋습니다.

문맥교환 1차

참고로 멀티 스레드의 자원 효율성이 좋기 때문에 우리는 이 형식을 지향합니다.

프로세스들은 서로 문맥교환이라는 것을 하는데 이 때 프로세스 간의 문맥교환을 하면서 자원들 사이의 오버헤드가 커지는 반면, 스레드는 공유되는 영역이 있기 때문에 스레드 간 데이터를 주고 받는 것이 간단해서 자원의 소모가 낮습니다. 그렇기 대문에 응답 시간도 단축이 됩니다. 왜냐하면 같은 메모리 공간을 공유하기 때문입니다.

문맥교환이란 프로세스 상태변환 또는 스레드의 변환을 이야기합니다. 하나의 프로세스가 cpu를 사용중인 상태에서 다른 프로세스가 cpu를 사용하도록 하기 위해 이전 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업입니다.

프로세스 상태 변화

위에서 언급한 프로세스 상태 변화에 대해서 잠깐 훝고 지나가겠습니다.

프로세스가 가질 수 있는 상태를 말하면 생성, 준비, 실행, 대기, 종료가 있습니다.

간단하게 동작 프로세스를 설명하면, 레디 큐에 있던 프로세스가 디스패치에 의해 cpu를 할당 받게 되면 그 프로그램은 실행을 하게 됩니다. 이것은 실행 큐에 담기며 만약 입출력 작업이나 Event 등이 발생하게 되면 실행 큐에서 실행 중이던 프로세스는 wait 큐로 이동합니다. 작업이 모두 끝나면 다시 레디 큐로 가서 할당 받기를 대기하게 됩니다. 인터럽트가 발생한다면 실행 큐에 있던 프로세스는 레디큐로 이동하게 됩니다.

각 상태를 요약하면 다음과 같이 설명 할 수 있습니다.

이 개념은 끝까지 하고 전체적으로 한번 정리할 때 매우 중요하므로 다시 찾아오도록 하겠습니다.

문맥교환 2차

이 페이지를 한번 살펴 보십쇼. 모든 프로그램이 별개로 작동하는 것이지 않습니까? 크롬에서 카카오톡이 작동하는 것도 아니고 디스코드 위에서 한글 문서가 작동하는 것이 아니지 않습니까? 이러한 경우는 공유하는 영역이 아무것도 없습니다. 왜냐하면 모두가 하나의 프로세스이기 때문입니다. 이러한 경우 문맥교환이 발생한다면 이사짐 센터에서 노옵션 집으로 이사가는 것 마냥 사용했던 모든 짐을 빼야 하기 때문에 비 효율적입니다.

하지만 이 페이지를 한번 살려보십시오. 인터넷 익스플로러 위에서 인스타, ocu, 쿠팡, 넷플릭스 전부다 작동하지 않습니까. 이러한 경우를 멀티 스레드라고 합니다. 여기서는 창 하나를 닫아도 공유되는 영역인 인터넷이라는 큰 존재를 바꾸지 않고 개개의 페이지만 바꾸기 때문에 문맥교환에 매우 효율적입니다. 흔히 풀옵션 집으로 이사를 가는 것을 생각하면 됩니다. 냉장고, 세탁기, 붙박이장 전부 제공되기 때문에 몸만 가면 되니까 매우 편하고 효율적이라고 생각하면 될 것 같습니다.

캐시란

아까 맨 처음에 효율성이 좋아야 된다고 했는데, 그러면 어떻게 효율성을 높일 수 있을까 생각을 해 봅시다.

데이터를 미리 가지고 왔다가 프로그램이 필요하다고 할 때 전달해 주면 대기 시간이 줄어들지 않을까 하는 생각을 해봅시다. 이것이 캐시의 기본 이론이다. 캐시는 CPU간의 속도 차이를 완화하기 위해서 데이터를 미리 가지고 와서 저장해 두는 장소입니다.

데이터를 무작정 가지고 오는데 대충 때려 맞출 수도 없는 것이고, 어떻게 캐시의 적중률을 높일 수 있을까요? 우리는 캐시의 적중률을 캐시 히트라고 합니다.

캐시의 적중률을 높이는 방법은 간단합니다. 일단 많은 데이터를 가지고 오면 그중 하나는 맞지 않을까 해서, 가져오는 데이터의 양을 늘리는 방법이 있습니다. 그리고 다른 하나는 가까운 곳에 있는 데이터를 쓰지 않을까 해서 사용하는 지역성 이론이 있습니다. 이는 나중에 다시 등장하게 될 개념입니다.

간단한 컴퓨터 설명

여기까지 잘 따라오셨으면 지금까지 나온 정보를 쉽게 그림으로 정리하고 가겠습니다.

아 이 내용은 전에 sns에서 본 사람도 있을 것입니다. 흔히 CPU 코어라고 하는 부분에서 코어의 개수는 자신이 부릴 노예의 수라고 생각하면 됩니다. 참고로 인텔 코어 i5는 노예가 5명이라고 생각하면 편합니다.

그리고 스레드는 자신이 부릴 노예의 손 개수 입니다. 2개보다는 괴력몬처럼 많을수록 좋겠죠? 그리고 오버 클럭은 노예가 발까지 써가면서 수확하는 것을 의미합니다. 그니까 사용할 수 있는 모든 자원을 다 사용한 것을 이야기합니다.

 

그리고 종종 램이 다다익선이라는 말을 들을 수 있습니다. 왜냐하면 램은 수확한 작물을 옮길 수 있는 도구이기 때문입니다. 만약에 코코넛을 많이 땄는데 옮길 수 있는 수단이 작으면 한 번에 못 가져 가고 여러 번 왔다 갔다 해야 하지 않겠습니까? 이러면 별로 효율이 좋지 않고 CPU가 일을 많이 하게 됩니다.

우리가 종종 노트북을 쓰다가 팬이 위위잉 하고 소리가 나는 것 또한 이렇게 빡 세게 일을 해서 열이 올라 식히느라 그런 것 입니다. 아 그리고 방금 말했었던 캐시는 노예가 짊어지고 있는 가방입니다. 가방이 크면 한 번에 옮길 수 있는 코코넛이 많아서 효율이 좋겠죠? 그리고 가방보다는 덤프트럭으로 옮기는 것이 편하겠죠? 그래서 캐시 메모리가 크면 한 번에 옮길 수 있는 데이터가 많아서 좋다고 할 수 있는 것입니다.

마지막으로 하드 디스크는 수확한 코코넛을 보관하는 창고라고 생각하면 될 것 같습니다. 하드 디스크는 예전에 볏짚 창고라고 생각하면 될 것 같고 SSD는 최신식 창고라고 생각하면 될 것 같습니다. 그리고 nvme SSD는 매우 최신식 창고라고 생각하면 됩니다. 물건을 보관할 때도 빠르게 집어넣을 수 있고 뺄 때도 매우 빠르게 찾아서 뺄 수 있습니다. 또한 내부에는 크레인을 사용하는 노예들이 열심히 일을 하면서 도와주고 있다고 생각하면 될 것 같습니다.

 

별개로 그래픽 카드는 코코넛 수확말고 다른 것을 시킬 노예입니다. 이 친구는 코코코넛도 딸 수 있지만 높은 곳에 있어서 잘 못하고 대신에 땅에서 열리는 파인애플은 수확을 잘 하는 노예입니다.

파워는 노예에게 주는 월급이라고 생각하면 됩니다. 노예가 무슨 월급이냐고 생각하는 사람도 있을 텐데 그러면 노예의 밥이라고 생각하면 됩니다. 일을 많이 하는 노예한테는 밥을 많이 주고, 조금 일하는 노예한테는 밥을 조금 주는 것을 생각하면 됩니다. 모두가 음식물을 만들지 않게 딱딱 양을 맞춰서 주면 좋겠지만, 조금 여유롭게 주면 노예들이 기분 좋아서 열심히 하는 것을 생각하면 됩니다. 반면 원래 먹던 양보다 적게 주면 힘이 없어서 일을 열심히 하지 못합니다.   

 

총정리

여기서 지금까지 한 내용을 한번 정리하고 가겠습니다.

 

면접문제

그리고 여기서 이러한 종류의 면접 문제가 나올 수 있습니다.


 

이번 정리 시리즈가 운영체제에 대한 마지막 정리 글 일것 같습니다. 

그동한 요약한 내용을 바탕으로 발표 자료인 ppt와 같이 첨부해서 올렸습니다. 

많이 읽어주시고 부족한 내용 있으면 알려주시기 바랍니다. 

 

--감사합니다--