프로세스의 개념
정의 : 실행중인 프로그램 & 비동기적(Asynchronous) 행위
실행중인 프로그램이란
디스크에 있던 프로그램을 메모리에 적재하여
운영체제의 제어를 받는 상태가 되었다는 의미이다
프로그램에는 코드 , 정적 데이터가 들어가있다
스택: 지역변수 ,호출함수 반환 주소 (스택은 아래쪽으로 주소할당)
힙: 동적 메모리 할당 (힙은 위로 주소할당)
데이터: 전역변수 ,정적변수 할당 , 실행전에 초기화 한다
코드: 실행 명령을 포함하는 메모리 또는 목적파일에 있는 프로그램 영역이다
--------------------------------------------------------------------------
프로세스의 상태변화
1. 준비 -> 실행 : Dispatch(p1) //디스패치
2. 실행 -> 준비 : timeout(p1) // 타임아웃
3. 실행 -> 대기 : block(p1) //블락
4. 대기 -> 준비 : wakeup(p1) //깨움
프로세스 제어 블록 (PCB)
PCB는 프로세스 상태 정보를 저장한다
PCB 에 저장 되는 정보는 다음과 같다
1.식별자 : 각 프로세스 고유 식별자
2. 상태 : 생성, 준비, 실행, 대기, 중단 등 상태
3. 프로그램 카운터(PC) : 프로세스 실행하는 다음 명령의 주소 표시
4. 레지스터 저장 영역 : 컴퓨터 구조에 따라 형태가 다르다 인터럽트 발생시 PC와 함께 저장하여 재샐행할때 원래대로 복귀
5. 프로세서 스케줄링 정보 : 프로세스의 우선순위, 스케줄링 큐의 포인터
기타 스케줄 매개변수
6. 계정 정보 : 프로세서 사용 시간, 실제 사용시간 계정번호 , 프로세스 번호 등등
7. 입출력 상태정보...
8. 메모리 관리 정보 ..
...이하 기타 생략 ...
프로세스의 문맥교환(Context Switching)
정의 : 인터럽트나 시스템 호출 등으로 실행중인 프로세스의 제어를 다른 프로세스에 넘겨 실행상태가 되도록 하는 것을 컨택스트 스위칭이라 한다
프로세스를 이것저것 우선순위에 따라 변경하기 위해서는 프로세스 데이터를 레지스터와 메모리 사이를 왔다갔다 하며 복사해야 한다. 이런 일련의 과정을 context switching(컨텍스트 스위칭)이라고 한다.
<출처: http://www.cs.odu.edu/~cs471w/spring10/lectures/Processes.htm>
메모리와 레지스터 사이의 데이터 이동도 I/O이다. 즉, 컨텍스트 스위칭 과정에서 I/O가 발생한다. 빈번한 I/O 발생은 overhead를 발생시킨다. 실행되는 process의 수가 많고, 빈번한 컨텍스트 스위칭이 발생한다면, 이는 성능을 떨어뜨린다.
하지만 I/O가 발생할 때, 멍~하게 기다릴 수도 없는 노릇이다. I/O가 발생할 때, CPU를 게속 사용하려면 컨텍스트 스위칭은 피할 수 없다.
프로세스의 구조
OS는 프로세스에서
생성, 종료, 제거, 중단(suspend), 재시작, 우선순위 변경, 대기, 문맥 교환 등
다양한 작업 가능 하다
프로세스는 부모- 자식 관계를 유지하여 계층적으로 생성한다.
프로세스의 생성
1. 프로세스 식별자 할당
2. 주소공간,PCB공간 같은 구성요소 할당
3. PCB초기화,
4. 링크를 건다(해당 큐에 삽입)
프로세스가 작업 수행하려면 필요한 자원을 부모 프로세스에게서 얻거나
운영체제에서 직접 필요한 자원을 얻어서 사용할수 있다.
fork명령어 사용 2가지 이유
1. 부모와 동일한 자식을 복제
2. 자식 프로세스의 주소공간을 다른 프로그램 주소공간으로 덮어쓰기
Context Switching
이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의
레지스터를 적재하여 프로세스를 교환 하는
일련의 과정을 문맥교환(Context Switching)이라고 한다
'Computer Science' 카테고리의 다른 글
리눅스 Service 등록 하기 (0) | 2018.07.17 |
---|---|
리눅스 우분투 사용기 (0) | 2018.03.11 |