프로세스 개념(1)

개복치·2023년 5월 7일

운영체제

목록 보기
2/3

1. 프로세스 개념

1.1 프로세스

1) 프로세스란?
	- 실행 중인 프로그램
    - 작업의 단위
2) 프로세스의 현재 활동 상태
	- 프로그램 카운터 값
    - 프로세서 레지스터의 내용
3) 프로세스의 메모리 배치

	- 텍스트 섹션
    	: 실행 코드
        : 크기가 고정되어 잇어 프로그램 실행 시간 동안 크기가 변하지 않음
    - 데이터 섹션 
    	: 전역 변수
        : 크기가 고정되어 잇어 프로그램 실행 시간 동안 크기가 변하지 않음
    - 힙 섹션 
    	: 프로그램 실행 중에 동적으로 할당되는 메모리
        : 메모리가 동적으로 할당 됨에 따라 힙이 커지고 메모리가 시스템에 반환되면 축소됨
    - 스택 섹션 
    	: 함수를 호출할 때 임시 데이터 저장장소 
        : 함수가 호출될 때마다 함수 매개변수, 지역변수 및 복귀 주소를 포함하는 활성화 레코드가 스택에 푸시 되고 함서에서 제어가 돌아오면 활성화 레코드가 스택에서 팝됨
     ※ 스택 및 힙 섹션이 서로의 방향으로 커지더라도 운영체제는 서로 겹치지 않도록 해야함 
4) 프로그램과 프로세스 비교
 	- 프로그램
    	: 프로그램 자체는 프로세스가 아님
        : 수동적인 존재 (ex: 명령어 리스트를 내용으로 가진 디스크에 저장된 파일 = 실행파일)
    - 프로세스
    	: 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가짐
        : 능동적인 존재
    - 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨!
5) 멀티 프로세스
 	- 프로세스들이 동일한 프로그램에 연관될 수 있지만, 두 개를 별도의 실행 순서로 간주
    - 프로세스가 실행하는 과정에서 많은 프로세스를 생성
    - 프로세스 자체가 다른 개체를 위한 실행환경으로 동작 할 수 있음
    

1.2 프로세스 상태

1) 프로세스는 실행되면서 상태가 변함
2) 상태
	- new (생성)
		: 프로세스가 생성 중
	- running (실행)
		: 명령어들이 실행
	- waiting (대기)
		: 프로세스가 어던 이벤트가 일어나기를 기다림 (ex: 입출력 완료 또는 신호의 수신 등)
	- ready (준비)
		: 프로세스가 처리기에 할당되기를 기다림
	- terminated (종료)
		: 프로세스의 실행 종료
3) 운영체제에 따라 상태의 이름은 다르지만 상태들은 다 존재하고 더 구체적 일 수도 있음
4) 한 처리기 코어에서는 오직 하나의 프로세스만이 실행되고 많은 프로세스가 준비완료 및 대기 상태에 있을 수 있음!

1.3 프로세스 제어 블록

1) 프로세스 제어 블록 (process control block, PCB) 이란?
	- 특정 프로세스와 연관된 여러 정보를 수록하고 여러가지 정보를 가지고 있음
    - 프로세스를 시작시키거나 다시 시작시키는 데 필요한 모든 데이터를 위한 저장소의 역할
2) 프로세스 제어 블록 구성

	- 프로세스 상태 
    	: new(생성), ready(준비), running(실행), waiting(대기), halted(중지) 상태 등
    - 프로그램 카운터
    	: 프로세스가 다음에 실행할 명령어의 주소를 가르킴
    - CPU 레지스터들
    	: CPU 레지스터는 컴퓨터의 구조에 따라 다양한 수와 유형을 가짐
        : 누산기, 인덱스 레지스터, 스택 레지스터, 범용 레지스터들과 상태 코드 정보가 포함
        : 프로그램 카운터와 함께 이 상태 정보는 나중에 프로세스가 다시 스케줄 될 때 계속 올바르게 실행되도록 하기 위해서 인터럽트 발생 시 저장되어야 함
    - CPU-스케줄링 정보
    	: 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함
    - 메모리 관리 정보
    	: 운영체제에 의해 사용되는 메모리 시스템에 따라 기준 레지스터와 한계 레지스터의 값 포함
        : 운영체제가 사용하는 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보 포함
    - 회계 정보
    	: CPU의 사용 시간과 사용된 실시간, 시간 제한, 계정 번호, 작업 또는 프로세스 번호 등이 포함
    - 입출력 상태 정보
    	: 프로세스에 할당된 입출력 장치들과 열린 파일 목록 등을 포함

1.4 스레드

1) 단일 제어 스레드 
	- 프로세스가 한 번에 한 가지 일만 실행하도록 허용
2) 현대 운영 체제는 한 프로세스가 다수의 실행 스레드를 가짐
	- 프로세스가 한 번에 하나 이상의 일을 수행하도록 허용
    - 다중 처리기 시스템에서 여러 스레드가 병렬로 실행
3) 스레드를 지원하는 시스템에서 PCB는 각 스레드에 고나한 정보를 포함하도록 확장됨

2. 프로세스 스케줄링

2.1 프로세스 스케줄링

1) 프로세스 스케줄러가 달성 해야 할 목적
	- 다중 프로그래밍 
    	: CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행되도록 해야함
    - 시분할 
    	: 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 CPU 코어를 빈번하게 교체하는 것
2) 프로세스 스케줄러
	- 코어에서 실행 가능한 여러 프로세스 중에서 하나의 프로세스를 선택
3) 다중 프로그래밍 정도
	- 현재 메모리에 있는 프로세스 수
4) I/O 바운드 프로세스
	- 계산에 소비하는 것보다 I/O에 더 많은 시간을 소비하는 프로세스
5) CPU 바운드 프로세스
	- 계산에 더 많은 시간을 사용하여 I/O 요청을 자주 생성하지 않는 프로세스
    

2.2 스케줄링 큐

1) 준비 큐 

	- 준비 상태가 되어 CPU 코어에서 실행되기를 기다리는 프로세스
    - 연결 리스트로 저장
    - 헤더에는 리스트의 첫 번째 PCB에 대한 포인터가 저장
    - 각 PCB에는 준비 큐의 다음 PCB를 가리키는 포인터 필드가 포함
2) 대기 큐

	- 특정 이벤트 (ex: I/O 완료)가 발생하기를 기다리는 프로세스
3) 프로세스 스케줄링

큐잉 다이어그램

    - 새 프로세스는 준비 큐에 놓임 => 실행을 위해 선택되거나 디스패치 될 때까지 기다림
    - 프로세스에 CPU 코아가 할당되고 실행 상태가 되면, 여러 이벤트 중 하나가 발생
    	: 프로세스가 I/O 요청을 실행한 다음 I/O 대기 큐에 놓일 수 있음
        : 프로세스는 새 자식 프로세스를 만든 다음 자식의 종료를 기다리는 동안 대기 큐에 놓일 수 있음
        : 인터럽트 또는 타임 슬라이스가 만료되어 프로세스가 코어에서 강제로 제거되어 준비 큐로 돌아갈 수 있음
	- 대기 큐로 들어가는 이벤트들의 경우 프로세스는 결국 대기 상테에서 준비 상태로 전환된 다음 준비 큐로 다시 돌아가고 종료되기 전까지 이 주기를 반복
    - 종료 시점에 모든 큐에서 제거되고 PCB 및 자원이 반환

2.3 CPU 스케줄링

1) CPU 스케줄러의 역할
	- 준비 큐에 있는 프로세스 중에서 선택된 하나의 프로세스에 CPU 코어를 할당하는 것
    - 시스템 효율성 증가
2) 스왑
	- CPU의 속도에 맞는 캐시 등의 메모리는 크기가 작기 때문에 자주 사용하지 않거나 현재 작업에 필요하지 않는 메모리를 선별하여 속도가 느린 메모리에서 빠른 메모리로 올려놓는 기능
3) 스와핑
	- 메모리에서 제거한 프로세스의 내용 전부를 디스크의 스왑 영역에 저장한 뒤 후에 실행될 때 메모리로 불러와서 중단되었던 지점에서부터 실행을 재개하는 방식으로 프로세스의 수를 조절
    - 스왑아웃(swap out)
    	: 현재 중단된 위치를 기억하면서 적재된 프로세스를 메모리 내에서 디스크로 가는 상태
    - 스왑인(swap in)
    	: 디스크(하위 수준 메모리)에서 다시 메모리로 가는 상태       

2.4 문맥교환

1) 프로세스를 중단 후 재개하기 위해 현재 실행 중인 프로세스의 현재 문맥을 저장할 필요가 있음
2) 문맥
	- 프로세스의 PCB에 표현
    - CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보 등을 포함
3) 커널 모드 또는 사용자 모드에서 CPU 코어의 현재 상태를 저장한 다음 상태를 복원하여 작업을 재개
4) 문맥 교환

	- 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업
    - 문맥 교환이 일어나면, 커널은 과거 프로세스의 문맥을 PCB에 저장하고, 실행이 스케줄된 새로운 프로세스의 저장된 문맥을 복구
    - 문맥 교환이 일어나는 동안은 시스템이 아무런 유용한 일을 못 하기 때문에 이 시간은 오버헤드 임
    - 문맥 교환 시간은 하드웨어의 지원에 크게 달라짐
    

0개의 댓글