Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

운기의 블로그

프로세스(PROCESS) , 스레드(THREAD) #1 본문

운영체제

프로세스(PROCESS) , 스레드(THREAD) #1

운띠야 2020. 1. 4. 18:07

프로세스란?

 

1. 운영체제로 부터 자원을 할당 받는 작업의 단위

2. 실행중인 프로그램 ( task )


프로세스와 프로그램의 차이는 ??

 

프로그램은 하드디스크나 SSD에 존재하고 실행되기를 기다리는 명령어(코드)나 정적데이터를 의미합니다.

프로세스는 이런 프로그램을 메모리에 적재시켜 CPU를 할당 받고 프로그램을 실행하고 있는 상태를 의미합니다

 

프로세스 = 실행되는 프로그램

 

예를 들면 컴퓨터를 키고 메모장을 10번 클릭합니다. 메모장(=프로그램)을 10번 클릭했을 때 우리는 한개의 프로그램을 10번 실행시킨거고, 프로세스 상에는 10개의 메모장이 사용되고 있다고 생각하시면 됩니다.

 


프로세스의 구조

 

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html (그림참조)

 

운영체제안에는 프로세스가 존재하고 이런 프로세스들은 각각의 독립된 메모리를 가지고 있습니다.

메모리 영역은 크게 Code 영역, Data 영역 , Stack 영역, Heap 영역으로 나눠집니다.

 

1. Code 영역 

코드 영역으로 기계어로 제어되는 메모리 영역입니다.

 

2. Data 영역

주로 전역변수가 저장되고, Static 변수도 저장되는 영역입니다.

 

3. Stack 영역

지역 변수가 저장되며 함수의 매개변수 ( 함수 호출시 전달되는 인자값) 들이 저장되는 영역입니다.

 

4. Heap 영역

동적할당을 위해 사용되는 공간입니다.

 


프로세스 제어 블록 ( PROCESS CONTROL BLOCK)

 

PCB는 운영체제가 프로세스에 대한 중요한 정보들을 저장해 놓는곳이고 프로세스가 생성될떄 마다 고유의 PCB가 생성됩니다.  프로세스는 CPU를 할당받아서 작업을 진행하는데, 진행도중 프로세스의 전환이나 CPU 반납과 같은 일이

벌어지면 이러한 정보를 PCB에 저장하게 되고, 다시 불러 이전의 작업을 수행하고 싶으면 PCB에 저장된 내용을 가지고와 이전에 종료되었던 시점부터 다시 작업을 수행할 수 있게 해줍니다.

 

 

1. POINTER

부모 프로세스의 주소를 기억하는 부모프로세스에 대한 포인터 , 자식 프로세스의 주소를 기억하는 자식 프로세스에 대한 포인터, 현재 프로세스가 위치한 주소를 기억하는 프로세스가 위치한 메모리에 관한 포인터, 프로세스에 할당된 자원에 대한 주소를 기억하는 할당된 자원에 대한 포인터가 존재한다.

 

2. PROCESS STATE

프로세스의 현재 상태가 준비 단계, 대기단계, 실행단계인지에 대한 상태 정보를 가지고 있다.

 

3. PROCESS NUMBER

프로세스를 구별할 수 있는 고유 번호

 

4. PROGRAM COUNTER

프로세스 실행을 위해 다음 명령의 주소를 표시

cpu는 기계어를 한 단위씩 읽어 처리하기 때문에 다음 실행할 기계어의 명령어의 주소를 가르키는 정보

 

5. REGISTER

레지스터에 관련된 정보, 프로그램 카운터에 대한 정보

 

6. SCHEDULING

스케줄링 정보 및 프로세스가 실행될 우선순위에 대한 정보

 

7. MEMORY 

페이지 테이블, 세그먼트 테이블에 관한 정보

 

8. ACCOUNTING INFORMATION

cpu 사용시간, 실제 사용 시간, 한정된 시간에 관한 정보

 

9. STATUS INFORMATION RELATED to I/O

입출력장치, 개방된 파일 목록에 관한 정보

 


스레드란?

1. 프로세스가 할당 받는 자원을 이용하는 실행 단위

2. 프로세스 내에서 실행되는 흐름의 단위

 

기본적으로 프로세스를 생성할시 하나의 스레드가 같이 생성이 된다. 이를 메인 스레드라고 부른다.

프로세스와 스레드

 

스레드는 프로세스가 가지고 있는 주소공간이나 자원을 공유할 수 있다.

그리고 스레드는 크게 단일 스레드와 멀티 스레드로 나누어 진다. 

 

1. 단일 스레드 

하나의 프로세스에서 하나의 스레드가 존재 

하나의 레지스터와 스택으로 표현된다고 한다. 

 

2. 멀티 스레드

프로세스 내에는 다수의 스레드가 존재할 수 있다. 같은 프로세스 내에 존재하는 다수의 스레드는 운영체제 자원들을 공유하여 자원의 생성과 관리의 중복성을 최소화하여 수행능력을 향상 시킵니다. 이때 스레드들은 각각 독립적인 작업을 수행해야 하기 떄문에 각자의 독립적인 스택과 스레드ID, 프로그램 카운터, 레지스터 집합을 가지고 있는 것이다.