프로세스란 실행중인 프로그램이다(메인 메모리에 프로그램이 있는 상태). PID라는 고유한 번호를 부여받고 상태가 존재하며 프로세스를 실행한 주체는 user가 될 수도 있고 system이 될 수도 있다. 프로세스는 항상 자원을 운영체제로 부터 할당 받아 작동한다.
또한 data segment는 초기화된 것과 초기화되지않은 영역으로 나뉘어져 있다.
call stack
함수가 호출되면
function parameters를 push하고, pc의 값을 stack에 return address로 push한다. 그 위치의 stack pointer는 callee가 caller위치로 돌아가기위해 return address가 위치한 곳이므로 여기의 주소를 frame pointer에 저장한다. 즉 frame pointer는 함수가 return 할때의 위치를 저장해놓은 stack의 위치이다.stack pointer는 local variable까지 저장하고 그 바로 위를 가리키게 된다. stack frame은 parameter부터 local variable까지 callee에게 할당된 stack의 메모리 공간을 의미한다.
1. fork()사용하면 프로그램이 new상태의 프로세스가 됨.
2. new에서 cpu를 제외한 모든 자원이 준비된것이 확인 되면 ready상태 되고 Ready Q로 들어감.
3. cpu-scheduling에 의해서 cpu 할당 받으면 running상태 됨. ready Q에 있던 ready상태의 프로세스를 running상태로 scheduler가 dispatch함.
cf) scheduler dispatcher
dispatcher란 프로세스가 전환될 때 PCB를 해당 프로세스의 PCB로 전환 시켜 주고 register, pc, mmu등의 내용을 바뀐 프로세스로 전환 시켜 주는 os내의프로그램이다.
4. i/o 사용이 필요한 경우 running상태에서 waiting로 상태가 전환되고 i/o 사용이 끝나면 다시 ready 상태가 되어 Q에 들어감.
5. exit()하거나 main 함수 return ,kill명령어 사용시 프로세스가 terminated됨.
:해당 프로세스의 정보를 담고있는 block
:여러개의 프로그램을 메모리에 올려 놓고 하나의 cpu를 사용하여 cpu utilization을 maximum으로 하여 여러 프로세스를 동작시키는 것이 목표.
메모리에 여러 프로세스를 올리고 효율적으로 cpu를 할당하기 위한 scheduling이 필요해짐.
time sharing(multitasking)
:프로세스에 cpu를 점유할 수 있는 특정 시간 간격을 두고 그 시간이 넘으면 time-expire로 다른 프로세스로 context switching 시킴. 여러 사용자가 동시에 사용하여도 계속해서 context switching이 일어나므로 concurrent 하다고 느낌. multiprogramming을 위한 scheduling중 하나의 방법으로 사용 될 수 있음.
cf)multiprocessing
:위의 경우와 가장 큰 차이점은 cpu에 여러 프로세서가 존재하여 각각 register를 가지고 있는 것을 말한다.
:Ready Q의 process들을 어떻게 scheduling하고 dispatch하여 처리할지 결정하는것. Ready Q에 링크드리스트 형태로 PCB들이 저장되어있다.
마찬가지로 wait상태에는 waiting Q가 존재하여 i/o를 할당을 기다리고 있다.
:Context란 프로세스의 정보를 의미하고 이것은 PCB에 저장 되어있다. Context switch란 cpu에 다른 프로세스를 할당하는 것을 말하고 이것은 현재 pcb를 저장하고 새로운 cpu를 할당받을 프로세스의 pcb를 복원하여 실행하는 것을 말한다.