[운영체제] 5. 인터럽트, 문맥 교환(컨텍스트 스위칭), PCB 정의와 차이?
<운영체제 TIL 목록>
1. 운영체제란? 목적? 분류?
2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자.
3. 하드웨어, 메모리 및 메모리 보안 방법?
4. 프로그램의 구조, 실행 과정?
5. 인터럽트, 문맥 교환(컨택스트 스위칭), PCB 정의와 차이?
6. 프로세스란? 6가지 상태?
7. 스레드, 멀티스레드란? 프로세스와의 차이?
8. CPU 스케줄링란? 종류 평가 기준?
9. ''업데이트 예정'
1. 인터럽트란? 인터럽트 종류?
정의: 인터럽트란 프로세서가 현재 실행하는 코드를 방해하여, 발생한 이벤트에 대한 처리를 요구하는 행위다.(출처: 위키피디아). 바로 이해가 되지 않는다면 2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자.를 읽고 오자:)
1) 하드웨어 인터럽트
- 하드웨어 인터럽트는 외부 장치에 의해 설정되며, 장치가 프로세서의 관심(attention)이 필요한 상황에 발생한다.
- I/O Interrupt: I/O 장치의 Controller가 local buffer에 요구된 정보를 올려놓았다고 CPU에게 알리는 작업.
- Timer Interrupt: 시분할 방식으로 프로세스들이 관리될 때, 프로세스의 cpu 사용 시간이 끝났다고 cpu에게 알리는 작업.
2) 소프트웨어 인터럽트
- 소프트웨어 인터럽트(=Trap)는 프로세서가 스스로 설정하며, 특정 Instruction 실행에 의해 발생된다. Instruction이 의도적으로 인터럽트를 발생시킬 수도 있고, Instuction에 의한 결과 혹은 처리 과정에서 발생될 수 있다.
- System call: 프로그램이 커널 함수 호출 필요시
- exception: 프로그램이 오류를 범할 경우. 계산 오류, page fault
2. 문맥 교환(Context swtiching)
정의: cpu의 사용 권한이 하나의 프로세스에서 다른 프로세스로 옮겨갈 때 일어나는 과정.
- 왜 문맥?: 문맥 교환에 대해 이해하려면 단어의 의미를 잘 파악하는 것이 중요하다. 여기서 문맥이란 무엇일까? 바로 프로세스가 실행되던 상태다. 우리가 보통 글의 문맥을 파악하라고 하면 글 한 부분만 보는 것이 아닌 글 안의 단어와 구 사이의 논리적인 관계를 파악하라는 뜻이다. 이와 같이 프로세스도 상태에 대해 이야기를 할 때 'cpu와의 관계를 바꾼다'까지 생각할 수 있다. 이를 위해 문맥에 기여할 수 있는 데이터를 저장하게 되고, 해당 자료구조는 PCB(process control block)이라고 한다(3번에 설명한다:)).
- 과정:
- 프로세스가 cpu를 잡고 실행중이다가 동기식 I/O가 필요한 Instruction을 만나 시스템 콜을 실행하거나 Timer 인터럽트 발생.
- 현재 프로세스 상태 PCB에 저장.
- cpu 권한->커널->인터럽트 벡터 -> 인터럽트 핸들러 -> 코드 수행
- cpu의 권한이 다른 cpu로 넘어감. 해당 과정에서 새롭게 cpu를 얻는 프로그램의 PCB가 cpu의 메모리에 업데이트 된다.
*꼬리질문1. 시스템 콜이 일어나면 무조건 컨텍스트 스위칭이 발생하나요?
프로세스가 시스템 콜을 해서 사용자 모드 실행 상태에서 커널 모드 실행 상태로 바뀌는 것을 문맥 교환이라고 하지 않Ans: 는다. PCB 자료구조에 상태를 업데이트하긴 하지만, cpu가 사용되는 문맥(시스템 콜을 한 프로세스를 위한 과정)이 바뀌지 않기 때문이다. 성능상의 차이 또한 존재한다.
*꼬리질문2. 커널이 cpu를 잡고 커널 코드를 실행하면 cpu 내에 저장된 메모리 상태가 바뀌니 컨텍스트 스위칭 아닌가요?
Ans: 컨택스트는 cpu가 사용되는 문맥이기 때문에 프로세스의 커널모드 실행은 컨텍스트 스위칭이 아니다.
*꼬리질문3. 컨텍스트 스위칭에서 일어나는 오버헤드가 있나요?
Ans: PCB 자료구조에 프로세스 진행 상태를 저장하는 것은 비교적 가벼운 일이지만 컨텍스트 스위칭은 오버헤드(overhead)가 뒤따른다. 아래는 오버헤드의 원인입니다.(출처: https://en.wikipedia.org/wiki/Context_switch)
- Running task scheduler
- 새롭게 cpu를 얻을 프로세스를 선정해야 하기 때문에 스케줄러가 작동돼야한다.
- TLB flushes: Translation lookaside buffer
- TLB는 최근의 가상 메모리와 물리 메모리 사이의 translation 데이터를 저장하는 곳입니다. 유저 메모리에 접근하기위한 시간을 줄이기 위해 존재하는 캐시메모리라고 볼수 있습니다.
- 꼬리질문3-1: TLB flush는 cpu 권한 이동시 무조건 일어나는 것 아닌가?:
- A: TLB flush는 system call할 때는 일어나지 않지만 context switching 중에는 일어난다고 합니다.
- 꼬리질문3-2: 왜 3-1A가 나오는건가?
- Indirectly due to sharing the CPU cache between multiple tasks
- 캐시 메모리는 context switching이 일어나면 flush된다고 합니다. TLB flush는 사실 오버헤드는 크지 않다고 합니다 캐시 메모리가 더 오버헤드가 큽니다. 이에 대해 알기 위해선 운영체제의 메모리 관리법을 알아야겠네요.
- 꼬리질문3-2: CPU 캐시란?
- A: cpu을 클락 속도와 메모리에서 데이터를 가져오는 속도 차이가 많이 나, 그 간격을 줄이기 위한 중간 메모리입니다. 캐시 메모리는 데이터의 지역성(Locality)을 이용합니다. 데이터의 지역성에는 시간 지역성, 공간 지역성, 순차적 지역성이 있습니다.
3. PCB(process control block)란?
정의: 프로세스 제어 블록은 운영체제가 프로세스를 관리하기 위한 프로세스에 관한 모든 유의미한 정보를 기록하는 곳입니다. 해당 자료구조는 커널의 데이터 영역에 위치합니다. 유의미한 정보에는 프로세스의 상태, 레지스터 값, PC값 등이 포함됩니다(출처: 위키피디아).
구조
- Process state(프로세스 상태)
- Process structuring information: 프로세스와 관련된 타 프로세스의 ID(ex. parent & child id)
- Process Numver(PID): 프로세스에게 부여된 식별자
- Process Scheduling state: 프로세스를 스케쥴링 하기 위한 정보(ex. cpu 뺏긴 후 기다린 시간, 우선 순위 등)
- Program Counter: 프로세스가 다음번에 실행할 Instruction 위치
- Registers: 레지스터 값
- Memory management information: 각각 프로세스의 cpu 스케줄링과 메모리 할당을 위해 필요한 정보
- Accounting information(자원 사용 정보): 사용자에게 자원 사용 요금을 계산해 청구하는 용도로 쓰임
- I/O status information: 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보를 나타냄.