이 포스팅은 저번 포스팅이었던 System Structure & Program Execution 다음 포스팅입니다.
저번 포스팅을 보지 않아도 이해 가능하지만, 보셨다면 더 깊이 이해할 수 있습니다.
https://mail-study.tistory.com/entry/System-Structure-Program-Execution
System Structure & Program Execution
컴퓨터 시스템 구조 및 프로그램 실행Mode Bit 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필드 mode bit를 통해 하드웨어적
mail-study.tistory.com
프로세스의 개념
Process is a program in excecutoin
프로세스는 실행중인 프로그램을 의미한다.
프로세스의 문맥 (Context)
CPU 상태를 나타내는 하드웨어 문맥 ex) Program Counter, 각종 register
Program Counter = CPU 내부의 레지스터이며, 다음 실행될 명령어의 주소를 가지고 있다. = 명령어 포인터
프로세스의 주소 공간
프로그램을 실행하면 OS는 실행 파일의 명령들을 읽어 프로세스를 생성하고, 메모리를 할당한다.
이 메모리를 프로세스 주소 공간이라고 한다.
code
실행할 프로그램의 코드를 저장한다. text 영역이라고 한다. Hex 파일이나 Bin 파일로 이루어져 있다.
data
프로그램의 전역변수, 전역변수, 정적변수, 배열, 구조체등이 저장된다.
stack
프로그램이 자동으로 사용하는 임시 메모리 영역이며, 지역 변수, 매개 변수, 리턴 값 등 잠시 사용된다.
함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
재귀함수가 너무 깊거나, 함수가 지역변수를 너무 많이 가져 stack 영역을 초과하면, stack overflow 에러가 발생
프로세스 관련 커널 자료 구조
PCB (Process Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보이며, 다음의 구성요소를 가진다 (구조체로 유지)
(1) OS가 관리상 사용하는 정보
Process state(프로세스의 상태), Process ID, Scheduling information, priority
(2) CPU 수행 관련 하드웨어 값
Program counter(명령어 포인터), registers
(3) 메모리 관련
code, data, stack의 위치정보(주소)
(4) 파일 관련
open file descripters
Kernel Stack
커널 스택은 프로세스 별로 따로 존재하며, 프로세스가 커널로 진입해서 여러 처리를 하는 동안 사용되는 스텍
프로세스의 상태
프로세스는 상태(status)가 변경되며 수행된다.
Running
CPU를 잡고, instruction(지시) 을 수행 중인 상태
Ready
CPU를 기다리는 상태 (메모리 등 다른 조건을 모두 만족하고)
Blocked (wait, sleep)
CPU를 주어도 당장 instruction을 수행할 수 없는 상태
Process 자신이 요청한 event
ex) I/O 가 즉시 만족되지 않아 기다리는 상태, 디스크에서 file을 읽어와야 하는 경우
New
프로세스가 생성 중인 상태
Terminated
수행(execution) 이 끝난 상태
Suspended (stopped)
외부적인 이유로 프로세스 수행이 정지된 상태
프로세스는 통째로 디스크에 swap out (한국말로 교체되다) 된다.
ex) 사용자가 프로그램을 일시정지 한 상태 (break key)
시스템이 여러 이유로 프로세스를 잠시 중단시킴 ( 메모리에 프로세스가 너무 많을 때)
+Blocked와 Suspend의 차이
Blocked : 자신이 요청한 event가 만족되면 ready 상태로 변경된다.
Suspend : 외부에서 resume 해주어야 active 된다.
문맥 교환 ( Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU가 다른 프로세스에게 넘어갈때, 운영체제는 다음을 수행한다.
1. CPU를 내어주는 프로세스의 상태를 프로세스의 PCB에 저장
2. CPU를 새롭게 얻는 프로세스 상태를 PCB에서 읽어온다.
System call이나 Interrupt 발생 시 반드시 Context Swithch가 일어나는 것은 아니다.
User mode (사용자 프로세스 A) | Kernel Mode (ISR or System call 함수) | User mode (사용자 프로세스 A) |
Interrupt or System Call 문맥 교환 없이 User mode 복귀 | ||
User mode (사용자 프로세스 A) | Kernel Mode (ISR or System call 함수) | User mode (사용자 프로세스 B) |
Timer Interrupt or I/O 요청 system call 컨텍스트 스위칭 발생 |
ISR = Interrupt service routine = 해당 인터럽트를 처리하는 커널 함수
이처럼 한 프로세스에서 다른 프로세스로 넘겨줄 때, 컨텍스트 스위칭이 발생한다.
위의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save 해야 하지만
문맥교환하는 두번째 경우 부담이 훨씬 크다 (eg. cache memory flush)
(cache memory flush = Cache line의 data를 0으로 변경하여 초기화하는 Cache line 초기화 기법)
프로세스를 스케줄링 하기 위한 곳
Job queue
현재 시스템 내에 있는 모든 프로세스의 집합
Ready queue
현재 시스템 내에 있는 모든 프로세스의 집합
Device queue
I/O device의 처리를 기다리는 프로세스의 집합
프로세스는 각 큐들을 오가며 수행된다.
스케줄러
스케줄러는 어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 코드를 의미한다.
Long-Term scheduler ( 장기 스케줄러 or job scheduler)
시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
프로세스에 memory (및 각종 자원) 을 주는 문제
degree of Multiprogramming (메모리에 올라온 프로세스의 수) 를 제어한다.
time sharing system에서는 보통 장기 스케줄러가 없다.
즉, 시작 프로세스는 무조건 ready로 간다.
따라서 보통 사용하는 time sharing system은 Medium Term Scheduler (중기 스케줄러 or swapper)를 사용한다.
Short-Term scheduler ( 단기 스케줄러 or CPU scheduler)
어떤 프로세스를 다음턴에 running 시킬지 결정한다.
프로세스에 CPU를 주는 문제
충분히 빨라야 한다. (millisecond 단위)
Medium-Term schedular ( 중기 스케줄러 or Swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다.
프로세스에게 메모리를 빼앗는 문제
degree of Muliprogramming을 제어한다.
출처
KOCW 이화여자대학교 운영체제 반효경 교수 https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EC%B9%B4%EC%9A%B4%ED%84%B0
'운영체제' 카테고리의 다른 글
싱글프로세서 시스템(Single-Processor Systems) , 멀티프로세스 시스템(Multiprocessor systems) (0) | 2024.09.11 |
---|---|
프로세스 생성,수행, 종료, 프로세스간 협력, 특성 분류 (0) | 2024.05.19 |
쓰레드란...? (Thread, 구성, Benefits), 커널 쓰레드, 유저 쓰레드 (1) | 2024.05.18 |
System Structure & Program Execution (0) | 2024.05.09 |
운영체제란..? 목적, 분류, 예시 (0) | 2024.05.07 |