Keep going
프로세스 본문
프로세스 개념 (Process concept)
- cpu가 프로그램 실행. 실행 중인 프로그램을 여러가지 이름으로 운영체제에서 불렀다.
- Batch System - jobs
- 여러개의 job을 deque에 집어 넣고 작업을 하나하나 읽어들여서 실행. 이 작업 끝나면 다음 작업 읽어 들여서 실행
- Time-shared Systems - tasks
- 컴퓨터에 직접 사용자 online terminal로 연결해서 사용자들이 바로 사용할 수 있는 시스템으로 바뀜
- 이런 경우에 사용자가 실행하는 프로그램이 돌아가고 있을 때 실행중인 컴퓨터 프로그램을 task라고 부름
- Batch System - jobs
- job, task 모두 포함하는게 process (실행 중인 program)
- program이 실행중이다 → cpu가 프로그램 각 명령어를 레지스터에 갖고와서 계속 실행하는 것. cpu는 프로그램에 들어가있는 명령어들을 순차적으로 실행하게 된다.
- 실행하는 프로그램의 여러가지 부품으로 구성(프로세스 구성하는 요소들)
- 프로그램이 실행하려면 프로그램이 main memory에 올라와야 함 (메인 메모리안의 프로그램 내용)
- cpu안에 레지스터들이 존재하는데 register들도 프로그램 실행도중 어떤 값을 갖게 됨 (cpu 안의 register 값)
- cpu안에서 특별하게 pc라는 레지스터 있는데 pc는 현재 실행하고 있는 명령 위치 가리킴 (pc)
- 메인 메모리 안의 프로그램 내용은 한 덩어리로 들어가있는게 아니라 일반적으로 프로그램에 main memory 적재될 때 크게 4가지 영역으로 구현
- text
- 실행할 기계어 명령어
- data
- 전역 변수
- stack
- 함수 호출될 때 함수의 local 변수, 인수
- 함수 호출 될때 stack에 activation record 쌓였다가 반환될 때 stack에서 activation record 날라감
- heap
- ex) 자바 객체, c언어 malloc 등 이용해서 프로그램 실행 도중 메모리를 할당 받으면 heap 영역에서 메모리 할당 받는다.
- stack, heap은 같은 방향을 향해 자라나도록 메모리에 배치. 메모리 주소는 시스템 마다 다르겠지만 stack은 메모리의 작은 영역으로 자라나고, heap은 큰 영역으로 자라난다.
- text
- 프로그램 vs 프로세스
- 프로그램은 DISC에 들어가 있는 정적인 개체로 실행시킬 수 있는 파일이다.
- 파일은 메모리에 가져와서 CPU 가 레지스터에 명령어를 가지고 오고 실행 시작 한다. → 프로세스가 됨
- 하나의 프로그램은 여러개의 process 만들 수 있다.
- 프로그램 실행하기 위해서 2가지 방법
- GUI - 마우스 클릭
- Command Line - 명령어 이름
프로세스 상태 (Process state)
- 프로세스 일생을 단계로 나눈 것
- 5가지
- new - 프로그램이 적재되고 있는 상태 (프로세스가 만들어지고 있는 상태)
- running - 프로세스가 cpu를 받아서 현재 실행되고 있는 상태 (실행 상태)
- waiting - 프로세스가 입출력이나 이벤트를 기다리는 상태 (cpu를 할당받아도 당장 실행할 수 없는 상태)
- ready - 프로세스가 어떤 사건을 대기하고 있지 않아서 실행은 할 수 있는데 cpu를 할당받지 못해 cpu를 기다리고 있는 상태 (프로세스가 cpu를 기다리는 상태)
- terminated - 프로세스가 실행 완료되고 할당된 cpu 반납 (종료 상태)
- → new : 카드를 많이 읽어서 DISC에 갖다 놓음 (생성 상태, new)
- new → ready : 디스크에서 memory 올라오게 되면 실행 준비 상태
- ready → running : cpu를 할당 받으면 running 상태
- running → waiting : 현재 cpu를 받아 명령어를 수행중인 프로세스가 I/O 작업을 해야하는 경우, I/O 일어날 때까지 기다림, CPU 반납, 해당 장치 큐에 들어감
- waiting → ready : I/O 작업을 위해 장치 큐에있던 프로세스가 디스크 컨트롤러에 의해 서비스를 받아 일을 하고 디스크 컨트롤러가 인터럽트를 발생하여 프로세스가 한 일을(로컬버퍼에 저장된 데이터) 메모리에 올려놓고 프로세스는 다시 Ready Queue에 들어가게 됨
- running → ready : CPU를 할당받아 일을 하다 특정 이유로 다른 프로세스에게 CPU를 주고(dispatch) 다시 CPU를 기다림
- 1. time out : 프로세스 A가 정해진 시간만큼 CPU를 사용하고 CPU를 반납
- 2. interrupt : 프로세스 A보다 우선순위가 높은 프로세스 B가 Ready Queue에 존재하는 경우, 프로세스 B에게 CPU를 줌
- running → terminated : 종료하는 system call 의해 종료되는 상태
Process Control Block
- 운영체제는 현재 process가 몇개가 있고 process가 어디있고 누구껀지 현재 어디를 하고 있는지에 대한 프로세스 정보를 가지고 있어야 process를 관리할 수 있다.
- 운영체제가 갖고있는 process 정보를 저장하는 공간을 process control block이라고 한다.
- 운영체제가 관리하는 테이블안에 프로세스 다양한 정보들을 가지고 있는 구조체(PCB)를 놔둔다.
프로세스가 실행되고 있다가 cpu가 다른 프로세스로 넘어간다면 현재 process가 실행되고 있을 당시 cpu 상태를 저장해 놨다가 그것을 복원해야지만 process가 끝났던 상태에서 그대로 실행될 수 있다.
- 현재 process 상태
- process 번호 (구별 위함)
- 중지될 당시에 cpu 상태의 pc 값
- 중지될 당시에 cpu 레지스터 값
- cpu 프로세스가 메인 메모리 어디에 위치하고 있는지, 크기는 얼마인지에 대한 메모리에 대한 정보, 주기억장치에 대한 정보
- 프로세스가 사용한 device들, files에 대한 정보
- 나머지 정보들
- 프로세스 주인
- 프로세스 얼마나 시간을 많이 썼는지
p1 실행 → p2 cpu 넘겨줌
- I/O를 위해서 시스템 호출. 운영체제가 cpu 가지고 와서 I/O device 명령 내리고 process를 I/O가 끝날 때 까지 기다리게 하고 P2 실행
- P1 할당된 CPU 시간 다 사용한 경우. timer가 Interrupt 걸어서 p1 실행 중지하고 운영체제 제어권 가지고 옴. process가 실행되고 있는 상태 pcb에 저장. p1을 대기큐나 레디큐에 집어넣음 (왜 인터럽트 걸렸는지, 시스템 호출 걸렸다면 device controller에게 명령 내림) p2 실행 (전에 실행되었던 상태 pcb 2 정보를 레지스터에 load). p2도 실행이 멈추면 운영체제가 제어권 잡고 실행상태를 pcb2에 저장하고 이벤트 처리하고 다시 pcb1에 reload.
- 사용자 봤을 때 프로세스가 동시에 돌아가는 것처럼 보이나 현실적으로 cpu는 하나의 process 만 실행
Threads
- 단일 스레드 : 한 프로세스에 하나의 실행 흐름
- 다중 스레드 : 한 프로세스에 여러개 실행 흐름
Comments