ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 프로세스와 스레드
    CS/운영체제 2021. 7. 1. 04:50

    1학기 동안 면접들을 보면서 어떤 개념들이 부족한지 느꼈고, 한 번쯤 정리해야겠다 생각만 하다가 이제서야 정리하게 된다.

    2번의 기술 면접에서 두 번 다 물어 봤지만, 제대로 답을 하지 못했던 것 같다.

     

    기술면접에서는 내가 알고 모르고, 문제를 풀고 못 풀고 정해져 있기 때문에 면접 결과를 쉽게 받아들였다.

    심지어 몸풀기로 질문을 던졌던 프로세스와 스레드의 설명을 제대로 하지도 못한 나로서는 면접을 봤던 면접관들 조차도

    어이없게 봤지 않았을까 생각 해봤다. (ㅠ오ㅠ)..

     

    준비를 안 하진 않았지만, 말하는 연습정확히 알지 못한다면 오히려 면접관에겐 이 친구가 실제로 알고 있는건지

    더욱 물어볼 수 있는 여지를 줄 수 있겠다고 생각했다. (실제로 여지를 주는 답변은 피해도 된다 라는 피드백을 받았다.)

     

    천천히 면접 관련 중요한 질문들을 한 번 글로 쓰면서 구체화 시켜 체화를 해야겠다는 생각 했다.

     

    0. 면접 질문

    먼저 프로세스와 스레드를 설명하기 앞서, 한 번 면접 경험을 떠올려보며 시작을 해보겠다.

    글쓴이는 프로세스와 스레드의 차이를 질문을 받았고, 그에 대해 답을 이런식으로 했다.

     

    면접관 프로세스와 스레드의 차이점이 뭔가요? 아는대로 설명해주세요.

    글쓴이 프로세스는 프로그램이 실행되면서 디스크에 있던 (코드들? 프로그램) 이 메모리에 적재가 되어 그 프로그램의

                   실행중인 자체를 나타내고 있는 것이고, ... 스레드는 그 프로세스 안에서의 실행의 흐름입니다...!!

     

    중간중간에 많이 절기도 했고, 뭐 코드 영역, 데이터 영역, 힙 영역 등 최대한 차이점을 말하려고 노력했지만, 정리가 안된

    답변이었고 뭔가 잘 모르고? 말하고 있는것 같다는 느낌을 아마 면접관님들도 느꼈을것 같다.

     

    답변에 대해 질문을 또 하셨다.

     

    면접관 :  음... 실행의 흐름이라는게 뭐죠?

     

    이 질문을 듣고 제대로 개념을 알지 못하구나.. 라고 생각 했고, 진짜 자주나오는 면접 내용인 만큼 확실히 알고가자 생각했다.

     

    1. 프로세스 (Process)

    정의: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. (위키피디아)

             프로세스는 하나 또는 여러 스레드에 의해 실행되는 컴퓨터 프로그램의 인스턴스이다. (위키피디아 영어 번역)

             컴퓨터 내에서 실행중인 프로그램을 일컫는 용어. (네이버)

             프로세스(process)는 CPU에 의해서 실행 중이거나 주기억장치에 적재된 프로그램과 데이터를 말한다.

     

    여러 블로그, 사전 지식들을 찾아보았을 때, 공통적인 부분들이 있었다. "실행중인 프로그램" 이라는 것이다.

    사실 면접에서 사전적인 지식(정의)를 말하는 것이 좋은 지 안 좋은지 는 모르겠으나, 이렇게 암기식 공부를 해서는

    다른 부가적인 질문이 들어 왔을 때 방어하기 어렵지 않을까 생각이 들었다.

     

    단어의 의미를 해석해 나가면서 자기만의 그런 설명?을 갖춰야 했기에 정의를 이해하려고 노력해 보았다.

     

    i) 먼저 프로그램은 무엇일까?

     

    프로그램: 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음이다

     

    ii) 그렇다면 프로그램 명령어들은 어디에 저장될까?

     

    이러한 프로그램들은 하드디스크에 보관이 되어 있다가 사용자가 실행을 시키면 메모리에 적재가되어 동작을 한다.

     

    즉, 프로그램이 메모리에 적재가 되어 실행중일 때, 그 실행중인 프로그램을 "프로세스"라고 한다.

     

    추가 질문 -> 메모리에 꼭 올라 와야 프로그램이 실행될 수 있는건가요?

    정답은... 본인 스스로 찾아보시길.. 글쓴이도 찾다가 결국 최종 답을 못 찾았다..

     

    운영체제는 프로세스에 자원을 할당하게 되는데 다음과 같은 영역들을 가지고 있다.

    프로세스 구성

    Code 영역 : 프로그램 명령어가 올라가는 영역

    Data 영역 : 정적변수, 전역변수, 배열 등이 할당되는 영역

    Stack 영역 : 함수의 실행에 필요한 인자값의 저장 및 지역변수들을 저장하는 영역

    Heap 영역 : 프로그램 실행 중 동적할당 시 사용되는 영역

     

    프로세스는 다음과 같은 영역들로 구성되어 있다. 프로세스는 메모리에 적재되어 있으며 CPU는 해당 프로세스의

    명령어들을 실행시키며 동작하게 한다.

     

    2. 스레드 (Thread)

    스레드를 공부하고 멀티 스레드, 멀티 프로세스 등 여러가지 개념들을 공부하니 갑자기 헷갈리기 시작했다.

     

    멀티 스레드 라는 것이 동시적으로 처리한다고 되어 있는데, 이것들이 병행해서 처리하는 건가? 아니면 각각 빠르게 실행

    하면서 동시에 실행하는 것처럼 보인다는 건가? 등 여러모로 헷갈렸다.

     

    정의: 프로세스 내에서 실행되는 흐름의 단위를 말한다. (위키피디아)

            CPU가 독립적으로 처리하는 하나의 작업 단위를 뜻합니다. (네이버)

     

    프로세스 (스레드 3개가 돌고 있다 가정)

    스레드는 프로세스 내 자원을 공유한다. 스택만 빼고!!

     

    스택이 독립적으로 스레드마다 할당되는 이유

    각 스레드마다 호출되는 함수, 매개변수를 저장하는 공간, 되돌아 오는 주소값 등 각각의 실행의 흐름을 저장하기 위해서

    별도의 공간이 필요하기 때문이다.

     

    그렇다면 실행의 흐름이 뭘까?

    프로세스는 프로그램이 실행되었을 때 운영체제로부터 자원을 할당 받는다. (메모리의 공간 <코드, 힙, 스택, 데이터>영역 ) 

    이 자원을 할당 받아 그것을 이용하는 것, 스레드는 독립적으로 각 스택 영역에서 함수를 호출하며 동작할 수 있게 되는데

    이는 하나의 실행의 흐름이라고 볼 수 있는 것이다.

     

     

    전체적인 흐름

     

     

    전체적인 흐름(출처: 위키피디아)

     

     

    참고자료

     

    위키피디아: https://en.wikipedia.org/wiki/Process_(computing) 

    네이버 백과: https://terms.naver.com/entry.naver?docId=1221314&cid=40942&categoryId=32828 

    다음 백과: https://100.daum.net/encyclopedia/view/61XX79800033

    프로세스 관련: https://haedallog.tistory.com/138

     

    CPU코어 및 스레드 관련 블로그 https://m.blog.naver.com/PostView.naverisHttpsRedirect=true&blogId=futuremain&logNo=221397529319 

    멀티 스레딩 관련 블로그

    https://asfirstalways.tistory.com/340

     

    댓글

Designed by Tistory.