Process / Program
프로그램
- disk에 위치한다.
프로세스
- disk에 위치한 program file을 메모리에 올린 것이다. runnable program.
프로세스의 구성
- 프로세스는 기본적으로 메모리에 위치한다.
- Stack, Heap, Data, code 영역으로 구분된다.
- 0번지는 stack의 처음이며, 끝은 code의 끝이다.
- process 는 memory 외에도 register도 있다.
- program counter, stack pointer 등이 있다.
- pc는 다음 실행 명령어 가리키며
- sp 는 stack내의 특정 공간 위치 저장해준다
프로세스 생성
- fork와 같은 시스템콜을 사용해 프로세스를 생성한다.
- 프로세스 생성 = 프로그램을 메모리로 load 하는 작업 (프로세스의 주소공간으로 load)
- load : 디스크 상 프로그램을 메모리로 가져와 프로세스 주소공간상에서 읽는 것
- DISK IO는 느리기 때문에 일부분을 load한 뒤 나머지를 load한다.
- Stack - 지역변수, 함수 파라메터, 리턴주소 등이 저장된다.
- Heap - 동적할당 , malloc, free
- OS는 그사이에 I/O 셋업, 다르 초기화 작업 진행
- main()에서 프로그램 시작. OS는 CPU제어권을 새로 생성된 프로세스 에게 줌.
프로세스 상태
- 프로세스는 여러 상태를 갖게 된다.
- OS는 한번에 하나의 프로세스를 실행하는 것이 아니라 여러 프로세스 짧은 간격으로 실행
- 실행중인 프로세스 외의 다른 여러 상태를 정의해야함.
2가지 상태
- 수행 / 비수행 두단계로 process 상태를 나눌 수 있다.
- Running(수행)은 프로그램 일부 / 전부가 메모리에 올라갔다는 뜻이며 나머지 프로세스는 not running 비수행이다.
- 이후 Time Quntum , interrupt, disk I/O 등 전환 시기가 오면 다음 프로세스를 선택한다.
3가지 상태
- 위에서 not running 상태를 ready/blocked 상태로 나눈다.
- Running 실행
- 프로세스가 처리기 상에서 실행
- Ready 준비
- 프로세스가 실행 준비(메모리에 로딩된 상태)이지만 아직 실행되지 않음
- Blocked 블럭 = Sleep = 수면
- 프로세스가 특정 작업을 수행
- disk I/O 요청시 블럭 상태가 됨.
5가지 상태
- 생성과 종료 상태가 추가된 것이다.
- I/O 가 끝나는 것이 사건이다.
9가지 상태
- 스왑 된 상태 - 메모리 부족해서 디스크로 일부 옮김aa
- 프로세스 생성시 메모리 여유가 충분하면 바로 Ready 상태로 갈 수 있지만 그렇지 않다면 스왑된 준비상태로 간다.
- 스왑된 준비 - 프로그램 파일이 메모리가 아닌 DISK 내의 스왑 공간으로 이동된 경우를 뜻한다.
- 스왑 상태에서는 SwapIn(메모리로 이동해 Ready 상태가 되는 것)밖에 없다.
- 메모리 준비 상태에서는 Kernel mode로 가거나 User mode로 갈 수 있다.
- User mode로 가는 방법은 2가지가 있는데
- Kernel mode 를 거쳐가거나
- preemption을 해 거쳐가는 것이다.
- preemption은 선점으로 다르프로세스가 차지하고 있던 cpu를 빼앗는 것이다.
- user mode에서 I/O를 시작하거나 시스템콜 호출, 인터럽트가 발생하면 커널모드로 이동한다.
- 커널모드에서 수행이 끝나면 다시 선점을 통해 유저모드로 돌아가거나 IO시 메모리상의 수면 상태로 넘어갈 수있다.
- 메모리 상의 수면 상태에서는 메모리에 여유가 사라지면 해당 프로세스는 스왑상태로 넘어갈 수 있다.
- 커널 모드에서는 EXIT호출을 위해 ZOMBIE상태가 될 수 있다.
Context
- 문맥은 크게 System 문맥, 메모리 문맥, hw(레지스터) 문맥이 있다.
Context Switching 문맥교환
- 어떤 프로세스가 인터럽트 될 때 문맥 데이터의 현재 값이 해당 제어블록의 적절한 필드에 저장되고, 그 프로세스 상태가 블록, 준비 등 과 같은 값으로 변경. OS는 다르프로세스를 선택하여 수행상태로 만들고 그 프로세스의 프로세스카운터와 문맥데이터를 레지스터에 적재하여 새 프로세스 수행
'Operating System' 카테고리의 다른 글
[Operating System] 공평한 스케줄러 (0) | 2022.12.28 |
---|---|
[Operating System] MLFQ Multi-level Feedback Queue Scheduling (2) | 2022.12.28 |
[Operating System] 스케줄링 (0) | 2022.12.19 |
[Operating System] 프로세스 실행 (0) | 2022.12.19 |
[Operating System] 운영체제란? (0) | 2022.12.19 |