인터럽트
인터럽트(interrupt)는 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말하며, 0으로 숫자를 나누는 산술 연산오류, 프로세스 오류 등으로 발생합니다. 또한 오류뿐만 아니라 키보드, 마우스 등 IO디바이스를 사용할 때의 인터럽트, 우선순위가 높은 프로세스의 발생 등으로 발생
인터럽트의 발생 과정
인터럽트 발생 -> 인터럽트 벡터 -> 인터럽트핸들러 함수 실행 -> 명령어 실행 -> 인터럽트 종료 -> 순차적 명령어 실행
인터럽트의 종류
[하드웨어 인터럽트]
IO 디바이스 등 하드웨어에서 발생하는 인터럽트 ex) 마우스 버튼 클릭 시,디스크에서 파일 읽기,쓰기 작업 완료
[소프트웨어 인터럽트]
트랩(trap)이라고도 함. 프로세스 오류, 프로세스의 종료, 시작 등을 기반으로 프로세스에서 발생하는 인터럽트입니다.
하드웨어 인터럽트보다 우선순위가 높은 인터럽트
# Node.js 기반 서버 구현
const express = require('express');
const app = express();
const path = require('path')
const pt = path.join(__dirname, "a.json")
const fs = require('fs')
app.get("/",(req,res) => {
const ret = fs.readFileSync(pt) // 디스크에 접근하는 코드
// 유저 모드 -> 시스템 콜 -> 커널 모드 -> 함수 호출 -> 유저 모드 -> 다음 줄
res.json(JSON.parse(ret))
})
app.listen(3000, () => {
console.log('Server listening on port 3000');
})
System call, Modebit
[System call]
시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 이를 거쳐서 호출하도록 설계되어있음, 프로세스 관리(생성,삭제 등), 파일관리, 디바이스 관리, 시간 및 날짜 관련 시스템, 프로세스 간 통신 때 이를 통해 커널함수를 호출합니다.
ex) kill() 함수 실행-> 시스템 콜 -> 커널함수 호출
[System call의 과정]
만약 유저프로그램이 I/O 요청을 위한 트랩을 발동했다고 하면 다음과 같은 과정이 발생됨
1. 유저 프로그램이 I/O 요청 트랩발동
2. 올바른 I/O 요청인지 확인
3. 유저 모드가 시스템콜을 통해 커널모드로 변환
4. 이후 커널함수를 실행
커널
운영체제의 핵심 부분이자 시스템콜을 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 함
유저 모드(modebit = 1)
유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
커널 모드(modebit = 0)
모든 컴퓨터 자원에 접근할 수 있는 모드
modebit(유저모드와 커널 모드를 구분하는 flag 변수)
시스템콜이 작동될 때 modebit을 기반으로 유저 모드와 커널 모드를 구분합니다. modebit은 1 또는 0의 값을 가지는 플래그 변수이며 1은 유저모드,0은 커널모드를 가르킴
시스템 콜의 장점
🌝유저 프로그램은 시스템콜을 기반으로 커널과 분리 됨 --> 유저프로그램은 복잡한 파일 시스템과 프로세스 생성 등에 대한 내부동작을 신경쓸 필요가 없음 또한, 운영체제의 관리하에 프로그램이 운영되므로 시스템의 안정성과 보안이 강화됩니다.
ex) 공격자가 만든 카메라 앱 프로그램이 그냥 아무런 제약없이 커널에 접근할 수 있다고 가정
카메라에 관련한 메모리 등이 오염될 수있고 그러면 카메라는 내 의도와는 관계없이 켜지게 되어 사생활이 노출 될 수도있습니다. 이러한 것을 방지하기 위해 유저 모드에서 시스템 콜로만 커널 모드에 진입할 수 있게 하나의 통로만을 만든 것입니다.
'CS > OS' 카테고리의 다른 글
[OS] 운영체제와 컴퓨터 시스템의 구조 (0) | 2023.07.27 |
---|---|
[OS] Memory Management (0) | 2023.04.20 |
[OS] Deadlock (0) | 2023.04.15 |
[OS] CPU Scheduling (0) | 2023.03.18 |
[OS] CPU Scheduling (1차정리) (0) | 2023.03.17 |