시스템 프로그래밍 - 스레딩의 개념
1. 프로세스, 스레드 개념
1) 프로세스
- 실행중인 프로그램을 의미
- 프로그램 : 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합
(1) 프로세스 상태 변화
- 프로세스의 상태 변화는 운영체제가 프로세서 스케줄러 이용하여 관리
- 프로세스 스케줄러는 선정한 작업의 상태를 변화시키며 프로세스의 생성에는 종료까지 과정 수행
- 커널의 프로세스 관리 기능이 프로세스의 스케줄링 담당
- 프로세스는 먼저 사용자 모드에서 실행
- 사용자모드에서 시스템 호출을 하면 커널 모드로 전환
- 수면 중이던 프로세스가 깨어나 실행 대기 상태로 전환되면 실행 준비
- 커널 모드에서 실행 중 입출력을 기다릴 때처럼 실행을 계속할 수 없으면 수면상태로 전환
(2) 문맥교환
- 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하여 프로세스를
교환하는 일련의 과정
- 오버헤드 발생, 메모리 속도, 레지스터 수, 특수 명령어의 유무에 따라 다름
- 오버헤드는 시간 비용이 소요되어 운영체제 설계 시 불필요한 문맥 교환 감소가 주요 목표
- 레지스터 문맥 교환, 작업 문맥 교환, 스레드 문맥 교환, 프로세스 문맥 교환 가능
(3) 프로세스와 스레드
- 처리할 프로세스의 수가 많아 질수록 프로세스간 문맥교환(context switching)을 하는 횟수 증가에 따른
시스템 성능의 저하
- 프로세스와 프로세스간의 잦은 문맥교환으로 성능저하를 막기 위해 정보들을 공유하는 스레드 사용(최소화)
2) 스레드
1) 스레드의 개념
- 프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위
- 프로세스 하나는 스레드 한개 이상으로 나눌 수 있음
- 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보 공유
- 다른 프로시저 호출, 다른 실행 기록 (별도 스택 필요)
- 관련 자원과 함께 메모리 공유가 가능하므로 손상된 데이터나 스레드의 이상 동작 고려
- 같은 프로세스의 스레드들은 동일한 주소 공간 공유
2. 스레딩 모델
1) 단일 프로세스에서의 단일 스레드와 다중 스레드
- 스레드마다의 스레드만의 stack이 존재
- code, data, files등의 스레드가 공유
(1) 스택 영역
- 함수 호출 시 되돌아갈 주소 값 및 지역변수(함수 안에서 선언한)를 저장하기 위한 메모리 공간
- 함수 호출시 필요한 메모리 영역
(2) 코드 영역 (자원 영역)
- 코드 영역의 main(),add(),subtract(),Devide()등을 다수의 스레드가 공유하면서 호출 가능
(3) 스레드 주소 공간의 개념
2) 스레드와 프로세스와의 관계
(1) 스레드간 코드 영역 공유
- 프로세스간의 통신(IPC)가 필요하지 않음
- 데이터를 주고 받는데 복잡한 통신기법이 필요하지 않음 (공유)
3) 메모리 입장에서 본 스레드 구조
(1) 하나의 프로세스에서 2개의 스레드 생성
- 각 쓰레드의 스택영역만을 생성
- 나머지 영역은 부모 프로세스의 영역을 공유
댓글남기기