일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- B tree 데이터삽입
- 커널 동기화
- SDK
- vite
- 반효경
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- 운영체제와 정보기술의 원리
- recoverability
- 코딩테스트 [ ALL IN ONE ]
- 개발남노씨
- 쉬운코드
- 백엔드
- 시스템프로그래밍
- 갤럭시 S24
- 인터럽트
- 온디바이스AI
- 트랜잭션
- 코딩애플
- 네트워크
- 시그널 핸들러
- 프로세스 주소 공간
- Git
- CPU 스케줄링
- 쉬운 코드
- 운영체제
- SQL
- 김영한
- Extendable hashing
- concurrency control
- 데이터베이스
- Today
- Total
티끌모아 태산
프로세스(Process)(2) 본문
프로세스 제어블록
⭐️프로세스 제어블록(Process Contorl Block:PCB)이란 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조이다. PCB에 저장되는 정보들은 다음과 같다.
- 프로세스 식별자(PID): 프로세스를 구별하기 위한 용도
- 프로세스의 상태: CPU를 할당해도 되는지 여부를 결정하기 위해 필요
- 프로그램 카운더의 값: 다음에 수행할 명령어의 위치를 나타낸다.
- CPU 레지스터 값: CPU 연산을 위해 현 시점에 레지스터에 어떤값을 저장하고 있는지를 나타낸다.
- CPU 스케줄링 정보: CPU 스케줄링을 위한 정보
- 메모리 관리 정보: 메모리 할당을 위해 필요한 정보
- 자원 사용 정보: 사용자에게 자원 사용 요금을 계산에 청구하는 용도
- 입출력 상태 정보: 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보
간단하게 정리해 보면 디스크에 실행파일로 존재하던 프로그램을 메모리에 올려 실행하면 프로세스가 생성되고 각각의 프로세스는 자신만의 고유한 주소공간 (코드, 데이터, 스택)을 가지며 이 프로세스의 메타 데이터 들이 PCB에 저장된다.
문맥교환(Context Switch)
저번 시간에 설명했듯이 문맥교환은 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정이다. 이렇게 문맥 교환 중에 원래 CPU를 보유하고 있던 프로세스는 프로그램 카운터 값 등 프로세스 문맥을 PCB에 저장하고 새롭게 CPU를 할당 받는 프로세스는 예전에 저장했던 자신의 문맥을 PCB로부터 실제 하드웨어로 복원시키는 과정을 거친다. 여기서 헷갈리지 말아야할 점이 있는데, 타이머 인터럽트가 발생하거나 프로세스가 입출력 요청 시스템 콜을 하여 봉쇄 상태(대기, blocked 등)에 들어가는 경우에는 문맥 교환이 일어나지만, 그 밖에 인터럽트나 시스템 콜 발생 시에는 문맥교환이 발생하지 않고 실행 모드만이 변경될 뿐이다. 즉 사용자 모드에서 커널 모드로 바뀌어 시스템 콜이나 인터럽트를 처리하고, 다시 동일한 프로세스의 사용자 모드로 돌아와 이전에 수행하던 작업을 계속 수행할 뿐이다.
- 문맥 교환이 일어나지 않는 경우: 사용자 프로세스A -->(인터럽트 또는 시스템 콜) --> (커널 모드) --> 문맥 교환 없이 사용자 모드로 복귀 --> (사용자 모드) 사용자 프로세스 A
- 문맥 교환이 발생하는 경우: 사용자 프로세스A --> (타이머 인터럽트 또는 입출력 요청 시스템콜) --> (커널 모드) --> 문맥 교환이 일어남 --> (사용자 모드) 사용자 프로스세 B
요약하면, 타이머 인터럽트나 입출력 요청 시스템 콜이 발생해 CPU의 제어권이 한 프로세스에서 다른 프로세스로 이양되면 문맥 교환이 발생한 것이고 그 밖에 인터럽트나 시스템 콜 요청으로 한 프로세스에서 커널 모드로 갔다 다시 동일한 프로세스에 CPU가 이양된다면 이것은 문맥 교환이 발생한 것이 아니다.
또한, 문맥 교환이 빈번하게 발생한다면 이에 드는 오버 헤드가 상당히 커지기 때문에 타이머에 적절한 CPU할당 시간을 정하는 것이 중요하다. 너무 짧게 설정하면 비번한 문맥 교환으로 오버헤드가 커지고 또 너무 길게 하면 시분할 시스템의 의미가 퇴색하기 때문이다.
'CS 지식 > 운영체제' 카테고리의 다른 글
프로세스(Process)(3) (0) | 2023.08.01 |
---|---|
프로세스(Process)(1) (0) | 2023.07.29 |
프로그램의 구조와 실행 (0) | 2023.07.28 |