minyule.log
로그인
minyule.log
로그인
혼공컴운 챕터 10. 프로세스와 스레드
김민영
·
2023년 2월 4일
팔로우
0
운영체제
0
혼공학습단
목록 보기
8/22
10-1 프로세스 개요
프로세스 확인하기
윈도우 작업 관리자에서 확인 가능
유닉스는 ps 명령어로 확인 가능
포그라운드 프로세스 foreground process
눈에 보이는 프로세스
백그라운드 프로세스 background process
눈에 안보이는 프로세스
데몬(유닉스), 서비스(윈도우)
사용자와 상호작용하지 않는 백그라운드 프로세스
프로세스 제어 블록
프로세스 제어 블록 PCB : Process Control Block
프로세스 실행 순서 관리, 프로세스에 CPU와 같은 자원 배분
프로세스에 관한 정보 저장하는 자료 구조
커널 영역에 위치
운영체제는 PCB를 통해 특정 프로세스를 식별, 프로세스 처리에 필요한 정보 판단
PCB에 담기는 정보
프로세스 ID : PID
프로세스를 식별하는 고유한 번호
같은 프로그램을 두 개 실행해도 다른 PID의 프로세스로 생성됨
레지스터 값
프로세스가 실행되면 이전까지 사용했던 레지스터의 중간값 복원 : 이전까지 진행했던 작업을 이어서 실행하기 위함
프로그램 카운터와 같은 레지스터 값
프로세스 상태
현재 프로세스의 상태
ex. 입출력장치를 기다리는 상태, CPU 기다리는 상태, CPU 이용하는 상태 ...
CPU 스케줄링 정보
프로세스가 언제 어떤 순서로 CPU를 할당받을지
메모리 관리 정보
프로세스가 메모리에 저장된 위치
베이스 레지스터, 한계 레지스터
페이지 테이블 정보
사용한 파일과 입출력장치 목록
어떤 입출력장치가 할당되었는지, 어떤 파일을 열었는지
문맥 교환
프로세스 실행 순서가 넘어갈 때 발생
문맥 context
프로세스 수행을 재개하기 위해 기억해야하는 정보
하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있음
문맥 교환 context switching
인터럽트 발생 시 PCB에 문맥 백업, 다음 프로세스의 문맥 복구
너무 자주 발생 시 오버헤드 발생
프로세스 메모리 영역
정적 할당 영역 : 코드 영역, 데이터 영역
동적 할당 영역 : 힙 영역, 스택 영역
코드 영역 == 텍스트 영역
기계어 명령어가 저장.
CPU가 실행할 명령어 담김.
읽기 전용
데이터 영역
프로그램 실행 중에 유지할 데이터
전역 변수
힙 영역
사용자(프로그래머)가 직접 할당할 수 있는 저장 공간
사용이 끝나면 반환 필요
반환하지 않으면
메모리 누수 memory leak
발생
힙 영역으로 할당된 공간이 메모리에 남아서 메모리 낭비 초래
스택 영역
데이터를 일시적으로 저장하는 공간
매개 변수, 지역 변수
메모리 할당
스택 영역은 높은 주소에서 낮은 주소로 메모리 할당
힙 영역은 낮은 주소에서 높은 주소로 메모리 할당
10-2 프로세스 상태와 계층 구조
프로세스 상태
생성 상태 new
메모리에 적재되어 PCB를 할당받은 상태
준비 상태 ready
CPU 할당받아 바로 실행할 수 있는 상태
실행 차례를 기다리는 상태
dispatch
: 준비 상태 -> 실행 상태
실행 상태 running
CPU 할당, 실행 중
할당 시간 동안만 CPU 사용 가능
할당 시간 끝나면 타이머 인터럽트 발동, 준비 상태가 됨
입출력장치를 사용하여 입출력장치 작업 끝날때까지 기다려야하면 대기 상태
대기 상태 blocked
프로세스가 입출력장치 사용하는 경우, 입출력장치 사용 끝날때까지(입출력완료 인터럽트 받을 때까지) 기다림
입출력장치 사용 끝나면 준비 상태가 됨
종료 상태 terminated
프로세스 종료.
운영체제는 PCB와 프로세스가 사용한 메모리 정리
프로세스 상태 다이어그램
프로세스 계층 구조
프로세스는 실행 도중 다른 프로세스 생성할 수 있음 - 그래프로 나타낸 것이
프로세스 계층 구조
부모 프로세스가 자식 프로세스를 생성
각 다른 PID 가짐.
자식 프로세스 PCB에 부모 프로세스의 PID인
PPID
기록되기도 함
최상위 층에는 최초의 프로세스가 있음 :
항상 PID가 1
유닉스 : init
리눅스 : systemd
macOS : launchd
프로세스 생성 기법
fork
부모 프로세스가 자신의 복사본을 자식 프로세스로 생성
exec
부모의 복사본인 자식 프로세스가 자신의 메모리 공간을 다른 프로그램으로 교체
과정
부모 프로세스는 fork로 복사본을 만들어서 자식 프로세스로 생성
자식 프로세스는 부모 프로세스의 자원 ( 메모리 내 내용, 열린 파일 목록 ) 상속받음. PID, 저장된 메모리 위치는 다름
exec을 통해 새로운 프로그램으로 전환. 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출
스레드
프로세스를 구성하는 실행의 흐름 단위
프로세스와 스레드
단일 스레드 프로세스 : 한 번에 하나의 작업을 처리하는 프로세스
멀티스레드 프로세스 : 여러 작업을 처리하는 프로세스
프로세스의 자원 공유 (힙, 데이터, 코드 영역)
멀티프로세스와 멀티스레드
프로세스끼리 자원 공유 X
프로세스를 fork하면, PID, 저장된 메모리 주소를 제외한 모든 자원이 복제되어 메모리 적재
같은 데이터가 중복되므로 메모리 낭비
스레드끼리 같은 프로세스 내의 자원 공유
각기 다른 스레드 ID, 레지스터 값(프로그램 카운터), 스택을 가짐
동일 주소 공간의 코드, 데이터, 힙 영역 공유
메모리 효율적으로 사용
협력, 통신 유리
하나의 스레드에 문제 발생 시, 다른 스레드에 영향 받음
프로세스 간 통신
IPC : Inter-Process Communication
ex. 파일을 통해 통신, 공유 메모리로 통신
미션
p.304 1번
김민영
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=
팔로우
이전 포스트
혼공컴운 챕터 9. 운영체제 시작하기
다음 포스트
혼공컴운 챕터 11. CPU 스케줄링
0개의 댓글
댓글 작성