OS - Process

Bomin Seo·2022년 8월 5일
0
post-custom-banner

Program

  • Disk 또는 파일시스템에 저장된 실행 파일 (Executable file on a disk)
  • 메모리로 로딩된 후 kernel에 의해 실행된다.

Process

  • process(UNIX), job(mainframe), Task(IBM 360, RTOS)
  • 메모리에서 실행되는 실행주체 (Executing instance of a program)
  • A dynamic and active entity
  • An encapsulation of the flow of control in a program
  • process ID를 이용하여 이름이 지정된다.(PID, Integer타입)
  • 실행과 스케줄링의 기본 단위
    • 스케줄러 : 프로세스의 실행 순서를 지정(스케줄링과 Dispatch작업 담당)

Process Address Space

Code(text segment)

  • CPU instruction이 있으며, 순차적으로 실행한다.

Data Segment

  • 프로그램이 실행되는 동안 항상 메모리를 차지하는 static data, 전역변수 저장

Heap

  • Dynamically memory allocated (DMA)에 사용, 동적 할당에 사용 EX) C++ new

Stack

  • 지역 변수 저장, stack pointer 탑재, 무한루프 사용시 stack overflow 발생
main(){
func(10, 20)
}
int func(int a, int b) {
 int c, d;
}
/*
stack data
return address
20 (int b)
10 (int a)
(int c)
(int d)
*/

Process State

ready

  • process를 실행 가능한 상태, ready상태 프로세스를 고르는 작업이 스케줄링
  • 수행 가능하나 스케줄링에 의해 실행이 안되고 있는 상태

dispatch

  • 스케줄링 된 ready상태의 프로세스를 CPU의 레지스터에 올리는 작업

waiting

  • I/O나 Event의 발생까지 대기하거나 disk I/O가 이루어질 때까지 기다리는 상태
  • I/O나 이벤트의 발생까지 실행이 불가능한 상태

Waiting상태에서 Running상태로 전환될 수 없다.

  • waiting > Ready > Running

idle process

  • running상태로 전환될 프로세스가 없는 경우 CPU의 활성화를 위하여 idle process를 runnning한다.
  • running상태가 아닐 때는 항상 ready상태이며 우선순위가 가장 낮다.

LINUX Example

  • ps명령어를 통하여 process state를 열람할 수 있따.
  • R(runnable) : 실행 중인 프로세스
  • S(sleeping) : Waiting상태
  • T(traced or stopped) : 사용자의 명령어에 의해 잠시 중단된 상태
  • D(uninterruptible sleep) : 메인 메모리에 존재하지 않는 상태
  • Z(zombie) : 프로세스가 종료된 후에 커널 안에 남아있는 상태

Process Control Block(PCB, 프로세스의 정보를 관리하는 Data Structure)

information associated with each process

  • process state
  • program counter
  • CPU register
  • CPU Scheduling information
  • Memory-management information
  • Accounting information
  • I/O status information

Context switch(CPU Switch)

  • cpu가 다음 프로세스를 수행하도록 상태 또는 레지스터 값을 교체하는 작업

  • save state into PCB : 레지스터의 상태 저장

administrative overhead

  • saving and loading registers and memory maps
  • flushing and reloading the memory cache
  • updating various tables and lists
    • overhead가 발생함으로써 성능이 낮아지지만 response time이 향상되기에 사용한다.

Schedulers (OS라고 볼 수 있다)

Long-term scheduler (or job scheduler)

  • Virtual Memory Management로 인해 쇠퇴
  • 어떤 process를 main memory의 ready queue에 올릴지를 결정한다.

Short-term scheduler (or CPU scheduler)

  • ready queue에 있는 프로세스 중에 어떤 것을 CPU에 올릴지를 결정한다.

Medium-term scheduler (or swapper)

  • Virtual Memory Management로 인해 쇠퇴
  • ready queue에 있는 프로세스를 다시 파일 시스템으로 내리는 것을 결정한다.

  • VMM : Main memory를 무한하다고 가정한다.

representation

Operations on Processes

Process creation

  • fork() (system call)
#include <sys/types.h>
#include <unistd.h>
int main()
{
	int pid;
	if ((pid = fork()) == 0)
	/* child */
		printf (“Child of %d is %d\n”, getppid(), getpid());
	else
	/* parent */
		printf (“I am %d. My child is %d\n”, getpid(), pid);
	
}

	% ./a.out
	I am 31098. My child is 31099.
	Child of 31098 is 31099.
	% ./a.out
	Child of 31100 is 31101.
	I am 31100. My child is 31101.
  • 새로운 PCB와 Address space를 만들고 초기화한다.
  • fork명령어가 수행되면 똑같은 process를 하나 더 만들고(parent – child), parent process의 address space에 있는 전체 content를 복사하고, parent에 의해 사용되는 resource를 가리키는 kernel resource 또한 초기화한다.
  • PCB를 Ready queue에 올린다.
  • parent에게 child의 PID를, Child에게 0을 반환한다
  • parent와 child의 실행 순서는 상황에 따라 다르다
  • child사용의 유용점
    • parent와 협업하며, parent의 데이터를 가지고 task를 수행한다 (웹서버에 많이 사용한다)
While (1) {
	int sock = accept();
	if ((pid = fork()) == 0) {
		/* Handle client request */
	} else {
		/* Close socket */
	}
}
  • parent가 하던 작업을 이어받거나 가지고 있던 데이터를 기반으로 작업할 수 있다.

Process execution

  • exec() (system call) / int exec(char prog, char argv[]) [LINUX]

  • 현재의 프로세스를 중단하고 프로그램을 로드하여 address space에 올린다.

  • 프로세스를 중단하고 실행하기 때문에 fork 후에 exec가 수행된다.

  • exec()의 return value는 이전의 프로세스이기 때문에 실행 실패시에만 값을 반환한다.

  • child가 exec되고 parent는 wait()하면 child가 exit()를 호출하기를 기다린다.

int main()
{
	while (1) {
		char *cmd = read_command();
		int pid;
		if ((pid = fork()) == 0) {
			/* Manipulate stdin/stdout/stderr for 
			pipes and redirections, etc. */
		exec(cmd);
		panic(“exec failed!”);
	} else {
	wait (pid);
		}
	}
}
  • 백그라운드 상황에서는 부모 프로세스가 waiting하지 않음으로써 수행된다.

process tree in linux

Process Creation/Execution: Windows

  • BOOL CreateProcess (char prog, char args, ...)

  • CreateProcess 명령문은 생성과 프로세스 실행을 동시에 수행하며 LINUX의 exec() 명령어의 매개변수와 동일한 매개변수를 가진다.

  • thread를 만들어 처리함으로써 fork() 단계를 수행할 필요가 없다.

  • 새로운 PCB와 Address space를 만들고 초기화한다.

  • prog를 adress space에 load하면 args를 메로리가 할당된 주소로 복사한다.

  • main 함수를 실행하기 위하여 hardware context를 초기화한다.

  • PCB를 Ready queue에 놓는다.

Process termination

  • exit() / _exit() / abort( ) / wait() (system call)
  • parent가 수행 중이며 wait하지 않을 때 child가 종료되면 zombie가 된다.
  • parent가 wait 수행 없이 종료되면 child는 orphan process가 된다.


Interprocess communication(IPC, 프로세스 간의 협력을 위한 방법)

  • process간 통신 시 process의 메모리를 직접 사용하면 memory protection에 위배된다.

message passing

  • pipes / FIFOs / message queue 방법이 있다
  • 운영체제에 message queue를 만들어 읽고 쓰기를 가능하게 한다.
  • 장점 : 운영체제가 동기화 작업을 관리해줄 수 있다.
  • 단점 : 데이터 복사가 많기 때문에 성능이 좋지 않다.

shared memory

  • 프로세스들이 공통적으로 접근할 수 있는 메모리 영역을 kernel(OS)이 만든다.
  • 장점 : 데이터 복사가 더 적고, 데이터 읽기/쓰기에 OS가 개입하지 않아 성능이 더 좋다
  • 단점 : 프로세스 간의 동기화 작업을 애플리케이션이 직접 해주어야 한다.

Socket

  • 하나의 운영체제 안에서 통신하는 위의 방법과는 달리 다른 컴퓨터 프로세스 간의 통신
  • 네트워크로 연결된 프로세스 간의 통신 IPC
  • Remote Procedure Call(RPC)
  • Remote Method Invocation(RMI in Java)

profile
KHU, SWCON
post-custom-banner

0개의 댓글