티스토리 뷰

공부한 거 까먹지 않게 정리하면서 다시 보기!

가장 기본이 되는 프로세스와 스레드의 정의와 차이점을 정리해보고자 한다. 또한 관련 내용 중 헷갈리거나 잊어버리지 말아야 하는 것들도 같이 정리해 보자.


 

프로세스(Process)란?

: 실행 중인 프로그램을 의미하며, 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다.

 

프로세스 제어 블록(Process Control Block, PCB)란?

: 프로세스의 정보를 담고 있는데 , 이 PCB는 운영체제가 프로세스 생성과 동시에 고유한 PCB를 생성하여 관리하는 데 사용한다.

다른 프로세스로 CPU를 넘겨줄 때(문맥 교환) 지금까지 수행하던 내역을 이 PCB에 저장하게 된다. 그러므로 다시 CPU를 할당받게 되었을 때 PCB에 저장된 내역을 불러와서 작업을 다시 수행할 수 있다.

PCB

PCB에 저장되는 정보

  • 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
  • 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
  • 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
  • CPU 레지스터
  • CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
  • 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
  • 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
  • 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정 번호 등

$문맥 교환(Context Switch)이란?

더보기

$문맥 교환(Context Switch)이란?

: CPU를 사용 중인 프로세스의 CPU 제어권이 다른 프로세스로 넘어가는 과정을 말한다.

CPU를 갖고 있는 프로세스의 사용시간이 끝남→ 스케줄링 알고리즘에 의해 다음 프로세스 선택됨 → 타이머 인터럽트 발생 → CPU 제어권이 운영체제에게 넘어감 → 사용시간이 끝난 프로세스의 상태를 PCB에 저장, 다음으로 선택된 프로세스의 이전 상태를 PCB로부터 복원시킴

CPU를 갖고 있는 프로세스에서 I/O 처리를 진행 → I/O요청

 

※ 여기서 문맥 교환에 필요한 시간, 메모리 등을 오버헤드라 부른다.

$문맥 교환이 아닌 경우!

프로세스가 실행 상태일 때 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와 원래 실행 중이던 프로세스의 업무를 잠시 멈추고 운영 체제 커널의 코드가 실행된다.

→프로세스가 사용자 모드로 실행되다가 커널 모드로 바뀌는 것뿐, 프로세스가 바뀌지 않기 때문.

 

스레드(Thread)란?

: 프로세스 내의 독립적인 실행 단위로, 하나의 프로세스에서 여러 개의 실행 흐름을 둘 수 있게 한다. 쓰레드는 같은 프로세스 내의 다른 스레드들과 stack영역을 제외한 code, data, heap 영역을 공유한다. 또한 PC 레지스터 역시 독립적으로 사용된다. 따라서 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.

전역 변수와 동적 할당된 공간을 공유하여 스레드 통신이 가능하지만 동시에 접근이 가능하므로 주의해야 한다.

※ 메모리 영역

메모리 영역별 관리 내용 

프로세스 Vs 스레드 차이점

  • 각 프로세스는 완전히 독립적이기 때문에 메모리 영역을 공유하지 않는다. 반면에 스레드는 해당 스레드를 위한 stack을 생성할 뿐 나머지 영역은 공유한다.
  • 프로세스는 독립적이므로 다른 프로세스 code영역의 함수를 호출할 수 없다. 반면에 스레드는 code영역을 공유하므로 같은 프로세스 내의 다른 스레드의 함수를 호출할 수 있다.

스레드가 스택만 독립적으로 사용되는 이유는?

: 스택은 함수 호출 시 전달 인자, 함수 내의 변수들, 돌아갈 주소 등을 저장하는 공간으로 독립적인 함수 실행이 가능하다는 것이 곧 독립적인 실행 흐름을 갖는다는 것이다. 이 때문에 독립적인 실행 흐름을 갖는 스레드는 각각 스택이 할당되게 된다.

PC 레지스터를 스레드마다 독립적으로 사용되는 이유는?

: PC 값은 스레드가 명령어의 어디까지 수행하였는지를 나타나게 된다. 스레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다. 따라서 PC 레지스터를 독립적으로 할당한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함