-
기술 면접 - 운영체제 (2)기술 면접 2021. 4. 19. 03:09
인터럽트
인터럽트란?
- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술
어느 한 순간 CPU가 실행하는 명령은 하나, 다른 장치와 어떻게 커뮤니케이션을 할까?
인터럽트 필요 이유
- 선점형 스케쥴러 구현
- 프로세스 running 중 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스를 중단시킴
- io Device와의 커뮤니케이션
- 저장매체에서 데이터 처리 완료 시, 프로세스를 깨워야 함(block state -> ready state)
- 예외 상황 핸들링
- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생할 경우 CPU가 해당 처리를 할 수 있도록 CPU에 알려줘야 함
주요 인터럽트
- Divide-by-Zero 인터럽트
- 타이머 인터럽트
- 선점형 스케쥴러를 위해 필요
- 하드웨어로부터 일정 시간마다 타이머 인터럽트를 운영체제에 알려준다
- 입출력 인터럽트
인터럽트 종류
- 내부 인터럽트 -> 소프트웨어 인터럽트
- 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용시 발생
- 0으로 나눌 때
- 허용되지 않은 명령 또는 공간 접근
- 계산 결과 overflow / underflow
- 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용시 발생
- 외부 인터럽트 -> 하드웨어 인터럽트
- 주로 하드웨어에서 발생하는 이벤트 (프로그램 외부)
- 전원 이상, 기계 문제, 키보드, Timer 이벤트
- 주로 하드웨어에서 발생하는 이벤트 (프로그램 외부)
시스템 콜 인터럽트
- 시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 함
- 프로세스 변경할 때도 사용자 모드와 커널 모드로 수시로 바뀌면서 실행
인터럽트와 IDT
- 인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있음
- IDT(Interrupt Descriptor Table)에 기록되어 있음
- 컴퓨터 부팅 시 운영체제가 기록
- 항상 인터럽트가 발생하면, IDT를 확인
인터럽트와 프로세스
- 프로세스 실행 중 인터럽트 발생
- 현 프로세스 실행 중단
- 인터럽트 처리 함수 실행
- 현 프로세스 재실행
프로세스와 컨텍스트 스위칭
프로세스 구조
- 코드 영역
- 프로그램의 코드가 저장이 된다
- 데이터 영역
- 변수가 어떤 것들이 선언되어 있는지 데이터 영역에 저장
- 스택 영역
- 함수, 지역 변수, 콜 스택( 임시 데이터 )
- 힙 영역
- 동적으로 메모리 공간 할당
- 데이터 영역과 코드 영역은 고정된 영역
Data 영역
- BSS
- 초기화 되지 않은 전역변수
- Data
- 초기 값이 있는 전역변수
컨텍스트 스위칭
PCB
Program Counter, Stack Pointer는 어디에 저장하지?
- Process Control Block(PCB)에 저장
- 프로세스가 실행중인 상태를 캡쳐 / 구조화해서 저장함
- Process ID, Register 값, 스케쥴링 정보, 메모리 정보 등
Context Switching(문맥 교환)
- CPU에 실행할 프로세스를 교체하는 기술
- 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
- 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행
디스패치(dispatch) : ready 상태의 프로세스를 running 상태로 바꾸는 것
프로세스 간 커뮤니케이션 (IPC)
프로세스들이 서로의 공간을 쉽게 접근할 수 있다면, 얼마나 위험할까
- 프로세스는 다른 프로세스의 공간을 접근할 수 없다
- 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위해 프로세스간 통신 필요ㅕ
- 프로세스간 통신 방법을 제공한다
파일을 사용한 커뮤니케이션
- 파일을 사용하면, 실시간으로 직접 원하는 프로세스에 데이터 전달이 어려움
커널 공간을 사용한 커뮤니케이션
프로세스끼리 커널공간은 공유된다
- Message Queue
- Shared Memory
- Pipe
- Signal
- Semaphore
- Socket
프로세스 총 정리
프로그램이 실행 되는 과정!!
- 코드를 컴파일 한다 -> 실행 파일이 만들어짐
- 쉘(gui, cli)을 사용해서 운영체제에 실행 파일 실행을 요청
- 프로세스 구조가 만들어짐
- 데이터 (BSS, DATA)
- 코드
- 스택
- 힙
- 스케쥴러 방식에 따라 실행이 된다 ( ready 상태에 진입 ) ( 예를 들어 선점형 라운드 로빈 방식 )
- 일정 시간마다 타이머 인터럽트가 발생한다
- 인터럽트를 처리
- 사용자 모드를 커널 모드로 바꿈
- IDT(Interrupt Descriptor Table)에서 해당 주소를 찾아서 실행
- 컨텍스트 스위칭을 통해 내가 실행한 프로그램이 running 상태가 된다
- PCB 정보를 CPU에 넣어준다
- 코드 영역 실행
- 실행 중, io 디바이스 처리 같은 시스템 콜을 만나면 block 상태로 전환(wait)
- io 디바이스 처리가 완료 되면 다시 인터럽트 발생 -> wait 상태에서 ready 상태로 다시 전환
'기술 면접' 카테고리의 다른 글
기술 면접 - 데이터 베이스 (2) (0) 2021.04.20 기술 면접 - 데이터 베이스 (1) (0) 2021.04.20 기술 면접 - 운영체제 (4) (0) 2021.04.19 기술 면접 - 운영체제 (3) (0) 2021.04.19 기술 면접 - 운영체제 (1) (0) 2021.04.19