pid t_pid; /* process identifier */long state; /* state of the process */unsignedint time_slice /* scheduling information */structtask_struct *parent;/* this process’s parent */structlist_headchildren;/* this process’s children */structfiles_struct *files;/* list of open files */structmm_struct *mm;/* address space of this process */
Process Scheduling
CPU 활용을 최대한으로 하는 것이 목적
Queue 자료구조를 이용하여 관리
Job queue : 시스템 내 모든 프로세스
ready queue : ready / waiting 상태의 프로세스
device queue
각 장치별로 queue head 존재
프로세스가 device 사용 요청 시 해당 queue에 PCB가 연결
프로세스의 동작 순서
생성된 프로세스는 ready queue로 할당
동작하는 프로세스는 CPU로 이동
I/O request 시 > I/O queue 할당 후 I/O 접근
time slice expire > ready queue 할당 후 CPU 할당
child fork / interrupt > 작업 후 ready queue 할당
scheduler
프로세스가 I/O를 많이 쓰는지, CPU를 많이 쓰는지를 판단(I/O bound, CPU bound)
short term(CPU scheduler)
현재 프로세스 바로 다음에 할당할 프로세스 선택
Long term(job scheduler)
데이터센터 등 대형 시스템에서 사용
다수의 작업을 모아서 한번에 효율적으로 처리
Context Switch
프로세스 상태를 저장하고 새 프로세스로 전환
상태를 저장 - 불러오고 새로 실행하는 과정의 overhead가 매우 큼
파일 입/출력을 많이 하는 프로그램이 느린 이유
Operations on Process
Process Create
부모 프로세스는 자식 프로세스를 생성
트리 자료구조를 형성
부모 프로세스는 자식 프로세스의 관리 가능(권한, 공유 등)
부모-자식 프로세스의 동시 동작시 대기 혹은 병렬 처리 가능
새 프로세스 생성 시, 부모 프로세스를 복사 후 프로그램 실행
UNIX의 프로세스 생성 명령어 - fork()
자식 프로그램은 exec()명령어로 프로그램 실행
부모 프로세스 wait : 자식 프로세스가 종료할 때까지 대기
Process Terminate
완료 시 exit 후 상태 데이터를 반환
자원을 과도하게 사용하는 등 프로세스 종료가 필요할 경우 abort()도 가능
cascading termination : 부모 프로세스가 먼저 종료시 하위 프로세스도 종료
자식 프로세스가 사라져도 자원 회수 등을 위해 PCB는 여전히 존재
부모 프로세스는 wait()으로 exit될 때까지 대기해야 함
wait 없이 프로세스 종료 시 : Zombie Process
wait 없이 부모 프로세스 종료 시 : Orphan Process
interprocess communication
프로세스 간의 정보 교환
교환 모델
message passing : 커널에서 제공하는 메세지 큐를 이용한 정보 교환
shared memory : 프로세스 간 공유 공간 할당
Producer-Consumer Problem
데이터의 생산자(Producer)와 소비자(Consumer) 관계
버퍼를 한정할지(bound), 안할지(unbound)의 문제
Shared memory
통신하고자 하는 프로세스 간에 공유하는 메모리
OS가 아닌 사용자 level에서 통신 조절
같은 메모리에 다른 프로세스가 동시에 조작 시 문제 존재
프로그래밍이 어려우나
Message Passing
send / receive를 이용하여 프로세스 간에 데이터 전송
프로세스 간의 링크 설정 필요
2개 이상의 프로세스 연결 / 통신 방향(단방향, 쌍방향) 등을 고려
direct Communication
데이터를 받을 프로세스 명시 send/receive(process, message)
pid가 바뀔 경우 접근 불가
Indirect Communication
mailbox(port)를 이용한 데이터 공유
같은 process 연결에서 여러 개의 link 형성 가능
mailbox 생성 > 데이터 교환 > mailbox 삭제 과정으로 진행
Synchronization
Blocking : 데이터 송신 / 수신 중 한쪽이 끝날때까지 다른쪽은 불가
non-blocking : 송/수신에 제한 x, 오류 방지를 위해 데이터가 없는 경우 return 등으로 다른 행동을 하기 위한 별도 조치 필요