shjung53.log
로그인
shjung53.log
로그인
[cs] 프로세스와 스레드
문돌이 개발자
·
2023년 10월 18일
팔로우
0
CS
0
프로세스
실행 중인 프로그램을 프로세스라고 한다.
포그라운드 프로세스
사용자가 볼 수 있는 공간에서 실행되는 프로세스
백그라운드 프로세스
사용자와 직접 상호작용이 가능한 백그라운드 프로세스
사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 (
데몬
,
서비스
)
프로세스 제어 블록
모든 프로세스는 실행을 위해 CPU가 필요하지만 CPU 자원은 한정되어 있다.
프로세스들은 돌아가며 한정된 시간 만큼만 CPU 이용
자신의 차례에 정해진 시간만큼 CPU 이용
타이머 인터럽트가 발생하면 차례 양보
빠르게 번갈아 수행되는 프로세스를 관리하기 위해 사용하는 자료구조를
프로세스 제어 블록
이라 부른다.(PCB)
PCB에는 프로세스와 관련된 정보가 적혀있고 이 PCB는 프로세스 생성 시 커널영역에 생성된다.
프로세스 제어 블록에 담기는 정보
프로세스 ID
특정 프로세스를 식별하기 위해 부여하는 고유번호
레지스터 값
자신의 실행 차례가 돌아오면 이전에 하던 작업을 이어서 하기 위해 이전까지 사용했던 레지스터의 중간값들을 모두 복원한다.
이를 위해서 프로그램 카운터와 스택 포인터와 같은 레지스터 값을 담고 있는다.
프로세스 상태
프로세스가 어떤 상태정보
입출력 대기, CPU 사용대기, CPU 사용중 등..
CPU 스케줄링 정보
프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
메모리 정보
프로세스가 어느 주소에 저장되어 있는지에 대한 정보
페이지 테이블 정보(메모리 주소를 알 수 있는 정보)
사용한 파일과 입출력장치 정보
할당된 입출력장치, 사용 중인(열린) 파일 정보
Context Switch (문맥 교환)
A 프로세스에서 B 프로세스로 실행순서가 넘어간다면
기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업하고 B 프로세스의 문맥을 복구한다.
Scheduler
CPU가 항상 놀지 않고 일을 할 수 있도록 프로세스를 선택하는 역할
Dispatcher
선택된 프로세스가 CPU에서 실행될 수 있도록 하는 역할
Context Switching 담당
Context Switching은 CPU 관련된 대단히 민감한 작업
민감한 작업이기 때문에 OS는 Context Switching을 커널모드에서 진행함
Context Switching 이후 선택된 프로세스를 실행하기 위해 다시
User Mode로 전환하는 역할도 담당
새롭게 선택된 프로세스가 어디서부터 작업을 진행해야 할지
적절한 위치로 이동시키는 역할도 담당
프로세스의 메모리 영역
프로세스가 생성되면 커널 영역에 PCB가 생성되고 사용자 영역에는 영역을 나누어 저장된다.
코드영역, 데이터 영역, 힙 영역, 스택 영역
코드영역
텍스트 영역으로도 불림
실행할 수 있는 코드, 기계어로 이루어진 명령어가 저장됨
데이터가 아닌 CPU가 실행할 명령어가 담겨있어 쓰기가 금지되어 있다. 읽기전용
정적 할당 영역
데이터 영역
프로그램이 실행되는 동안 유지할 데이터 저장
전역 변수와 같은 데이터가 저장됨
정적 할당 영역
힙 영역
프로그램을 만드는 사용자, 프로그래머가 직접 할당할 수 있는 저장 공간
힙 영역에 메모리 공간을 할당한 후 반환하지 않으면 메모리 누수가 발생할 수 있다.
동적 할당 영역
일반적으로 낮은 주소 → 높은 주소로 할당
스택 영역
데이터가 일시적으로 저장되는 공간
잠시 사용하는 값들, 매개변수와 지역변수와 대표적
동적 할당 영역
일반적으로 높은 주소 → 낮은 주소로 할당
프로세스 상태와 계층 구조
운영체제는 프로세스의 상태를 PCB에 저장하고 관리
프로세스 상태
운영체제마다 조금씩 차이가 있다.
생성 상태
이제 막 메모리에 적재되어 PCB를 할당 받은 상태
준비가 완료되었다면 준비 상태로
준비 상태
당장이라도 CPU를 할당받아 실행할 수 있지만 자신의 차례가 아니기에 기다리는 상태
자신의 차례가 된다면 실행 상태가 된다(디스패치)
실행 상태
CPU를 할당 받아 실행 중인 상태
할당된 시간 모두 사용 시(타이머 인터럽트 발생) 준비 상태가 된다
실행 도중 입출력 장치를 사용하면 입출력 작업이 끝날 때까지 대기 상태가 된다
대기 상태
프로세스가 실행 도중 입출력장치를 사용하는 경우에 진입하는 상태
입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태가 된다.
입출력 작업이 끝나면(입출력 완료 인터럽트를 받으면) 준비 상태가 된다.
종료 상태
프로세스가 종료된 상태
PCB, 프로세스의 메모리 영역 정리
프로세스 상태 다이어그램
프로세스 계층 구조
프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스 생성 가능
새 프로세스를 생성한 프로세스:
부모 프로세스
부모 프로세스에 의해 생성된 프로세스:
자식 프로세스
부모 프로세스와 자식 프로세스는 다른 프로세스 ID를 가진다.
자식 프로세스에 부모 프로세스 PID인 PPID를 기록하기도 한다.
부모-자식관계를 통해 프로세스는 계층을 형성할 수 있다.
프로세스 생성 기법
복제와 옷 갈아입기
부모 프로세스는
fork
를 통해 자신의 복사본을 자식 프로세스로서 생성한다.
복사본이지만 엄연히 다른 프로세스로 PID와 메모리 주소 등이 다르다.
자식 프로세스는
exec
를 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.
스레드
프로세스를 구성하는 실행 흐름의 단위
하나의 프로세스는 하나 이상의 스레드를 가질 수 있다
스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있다
스레드의 구성요소
스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택 등
실행에 필요한 최소한의 정보
프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행됨
멀티 프로세스와 멀티 스레드
프로세스 간에는 자원을 공유하지 않지만 스레드 간에는 프로세스 내에서 자원을 공유한다.
프로세스 간 통신(IPC)을 통해서 프로세스 간에도 데이터를 주고받을 수 있다.
참고자료
혼자 공부하는 컴퓨터 구조 + 운영체제 - 강민철
문돌이 개발자
까먹고 다시 보려고 남기는 기록
팔로우
이전 포스트
[android] 안드로이드의 커널
다음 포스트
[cs] 스케줄링 큐
0개의 댓글
댓글 작성