ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스와 스레드의 실행 방식
    CS/운영체제 2023. 10. 22. 16:51

     

     

    글을 시작하기에 앞서, 이 글은 유튜브 영상을 기반으로 학습을 위해 정리한 글이라는 점 말씀드립니다.

    더 정확하고 알찬 설명은 아래의 영상을 보시기를 권해드립니다.

     

    쉬운코드 - 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍, 이 모든 것을 한 방에 깔끔하게 설명합니다!! 콘텐츠 퀄리티 만족하실 겁니다!

     

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    "컴퓨터를 사용한다"는 문장의 뜻

     

    우리가 컴퓨터를 사용한다고 하면 대개 컴퓨터에 설치되어있는 프로그램을 사용하는 것을 이야기한다.

     

    위 문장을 행동을 기반으로 다시 작성해보면,

    "컴퓨터에 설치되어 있는 프로그램을 화면에서 더블클릭 한 뒤에 본체가 실행시키면 그 것을 이용하는 것"으로 바꿀 수 있겠다.

     

    다시, 이 문장은 크게 3가지로 부분으로 나눠 볼 수 있겠다.

    1. 컴퓨터에 설치되어 있는 프로그램

    2. 화면에서 더블 클릭 하는 것

    3. 본체에서 실행 시키는 것

     

    # 컴퓨터에 설치되어 있는 프로그램

    나는 누가 프로그램이 무엇이냐고 묻는다면

    "개발자가 작성한 코드와 그 코드가 실행되기 위해 필요한 데이터들을 하나로 묶어서 컴퓨터가 실행가능한 형태로 만들어 둔 것"

    이라고 설명할 것 같다.

     

    # 화면에서 더블 클릭 하는 것

    더블 클릭을 한다는 건, "프로그램을 실행될 준비상태로 만드는 것" 이라고 설명하고 싶다.

    더 구체적으로는 저장장치에 있는 데이터를 가져다 프로세스를 생성해서 메모리에 올리는 작업 정도로 생각해 볼 수 있겠다.

     

    # 본체에서 실행 시키는 것

    마지막으로, 본체가 실행 시킨다는 것은 "컴퓨터 속의 어떤 부품이 준비상태의 프로그램을 가져다가 사용자가 화면에서 볼 수 있게 실행시키는 것"이라고 말할 수 있겠다. (컴퓨터 속의 어떤 부품은 CPU이다.)

     

     

    위의 3가지에서 프로그램, 프로세스, 프로세서를 유추해낼 수 있다.

    - 프로그램: 개발자가 작성한 코드와 그 코드가 실행되기 위해 필요한 데이터들을 하나로 묶어서 컴퓨터가 실행가능한 형태로 만들어 둔 것

    - 프로세스: 프로그램이 실행될 준비 상태가 된 형태

    - 프로세서: 프로세스를 실행시키는 장치

     

     

    운영체제 과목의 가장 기본이 되는 내용을 아주 아주 추상화해서 살펴보았다.

    본론에 들어가기에 앞서 한가지 개념만 더 살펴보자.

     

     


     

    "가까울 수록 빠르다"

    "컴퓨터를 사용한다."라는 문장을 통해서 프로그램의 실행 과정을 추상적으로 살펴보았다.

    위 3가지 단계는 실제로 여러가지 물리적인 장치들을 거치게 되는데, 이 장치들이 다들 실행 속도가 다르다는 점이 항상 문제가 된다.

    운영체제 과목 중 "어떻게 하면 이 장치들간의 속도 차이를 효율적으로 대응하는가" 가 커다란 한 줄기라고 생각이 된다.

     

    가까울 수록 빠르다고 이야기했다. 어디와 가까울 수록 빠를까?

     

    https://quizlet.com/hk/749031664/13-hardware-and-software-flash-cards/

     

    우리 컴퓨터의 실행장치 (프로세서)에 가까워 질 수록 장치의 수행 속도가 빠르다는 특징을 가지고 있다. 

    하지만 아쉽게 속도가 빠를 수록 비싸고, 저장공간이 작다는 특징도 함께 가지고 있다.

    ( cpu > cache > ram > disc > network )

     

    RAM을 기준으로 이전, 이후 장치들의 속도차이가 현격하게 벌어지는데, 이 때문에 RAM 이후의 장치에서 데이터를 읽거나 쓰는 작업을

    I/O (input/output) 라고 부르고, 속도가 오래 걸리는 작업으로 분류하게 된다.

     

     

    이제 프로그램, 프로세스, 프로세서, I/O 개념을 가지고 본론으로 가보자.

     

     


     

    프로세서가 프로세스를 실행시키는 방법들

     

    1. 단일 프로세스 시스템 ( Single-tasking )

    가장 초기형태의 프로세서 운영방법이다.

    1개의 코어 CPU가 1개의 프로세스를 실행하는 방법이다.

     

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    # 문제점

    실행 중인 프로세스에서 Disk I/O 혹은 Network I/O가 발생한다면 CPU 역시 대기하는 상황이 발생하여 효율이 좋지 않다.

     

    # 해결책

    여러 개의 프로세스를 만들어서 번갈아 가면서 실행하자.

     

     


     

    2. 멀티 프로그래밍 ( Multi-programming )

    여러개의 프로세스를 만들어서 CPU를 최대한 활용하자.

    (비슷하게 시분할 시스템이 있는데 이는 동시에 여러 사용자가 컴퓨터를 사용할 수 있게 하는 것에 초점)

     

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    # 문제점

    한 프로세스에서 I/O가 발생할 경우, 다른 프로세스로 교체되어 CPU 효율은 증가하나, 실행 중인 프로세스의 실행시간이 길 경우,

    뒤 쪽의 프로세스들은 대기를 해야하는 경우가 발생.

     

    # 해결책

    개별 프로세스를 더 작게 나눠서 번갈아가면서 실행할 수 있도록 하자.

     

     


     

    3. 멀티 태스킹 ( Multi-tasking )

    cpu 최대활용 + 프로세스의 응답시간을 최소화 하는것.

    사용자의 입장에서는 여러 프로그램이 동시에 실행되는 것 처럼 느껴짐.

    선점형, 비선점형의 방식이 있다.

    (응답시간: input을 받고 output을 보기까지 걸리는 시간)

     

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    # 아쉬운 점

    프로세스가 교대 되는 것을 컨텍스트 스위칭이라 하는데, 프로세스의 컨텍스트 스위칭은 무거운 작업이라 오버헤드가 존재.

    프로세스 간의 데이터 공유는 별도의 매커니즘이 필요한 까다로운 작업.

    듀얼 코어의 개발로 동시에 2개의 프로세스를 실행할 수 있게 됨.

     

    # 개선책

    쓰레드를 활용하자 (Thread)

     


    쓰레드 ( Thread )

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    - 쓰레드는 Light Weight Process 라는 별칭을 가지고 있다.

    - 프로세스 내부에서 별도의 스택을 가지고, 스택의 힙 영역을 다른 쓰레드 들과 공유함.

    - 프로세서의 활용도를 높히나 동시성 이슈를 고려해야한다.

    - 현대 컴퓨터에서는 쓰레드가 OS 실행 단위.

     

     


    4. 멀티 쓰레딩 (Multi Threading)

    하나의 프로세스가 동시에 여러 작업을 할 수 있게 만듬.

     

    1) 싱글 코어

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    2) 듀얼 코어

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

     

    멀티 태스킹을 어떤 부분에서 개선할 수 있는지 생각해본 예시를 적어본다.

    기존에 멀티태스킹에서는 P1이 할당받은 시간에 I/O 작업이 있으면 무조건 컨텍스트 스위칭이 발생하였겠지만,

    쓰레드가 있다면, 프로세스는 그대로 두고 다른 쓰레드의 작업을 진행하면 되기 때문에 프로세스의 컨텍스트 스위칭을 줄일 수 있다.

     

    실행의 기본 단위는 쓰레드.

     


     

    5. 멀티 프로세싱 ( Multi-processing )

    두 개이상의 프로세서를 사용하는 시스템

     

     

     


    정리를 위한 퀴즈

     

    퀴즈 1 )

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

    O / X / X

     

     

    퀴즈 2 )

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

    X / O / X -> O / O / X

    프로세스는 1개이지만 2개의 스레드가 CPU사용을 놓고 경합을 벌여야하기 때문에 멀티 태스킹

     

     

    퀴즈3)

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

    O / X / O -> X / X / O

    코어가 2개에 쓰레드 2개이기 때문에 CPU 경합이 발생하지 않는다.

     

     

    퀴즈4)

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

    X / O / O

     

    퀴즈5)

    https://www.youtube.com/watch?v=QmtYKZC0lMU&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C

    O / O / O

    'CS > 운영체제' 카테고리의 다른 글

    가상화와 컨테이너화 기술의 비교  (1) 2024.01.05
Designed by Tistory.