📢 “여기까지 잘 오셨습니다. OS프로젝트를 시작합니다.”
OS프로젝트는 PintOS의 코드를 직접 수정해가며 진행하는 프로젝트입니다.
PintOS는 2004년 스탠포드에서 만들어진 교육용 운영체제예요. 우리 프로젝트는 이를 기반으로 KAIST 권영진 교수님 주도 하에 만들어진 KAIST PintOS
로 진행됩니다.
💡 팀 별로 프로젝트 1~3을 완수해갑니다.
KAIST PintOS Assignment : https://casys-kaist.github.io/pintos-kaist/
내용은 어렵지만, 매우 상세하게 접근 방법을 기술하고 있습니다.
[Pintos-KAIST] Project 1 : Alarm Clock
[Pintos-KAIST] Project 1 : Priority Scheduling
[Pintos-KAIST] Project 1 : Priority Scheduling and Synchronization
[Pintos-KAIST] Project 1 : Priority Donation
[Pintos-KAIST] Project 1 : Multi-Level Feedback Queue Scheduler
정리하느라 너무너무 힘들었는데 project2를 하고 있는 지금...
이때가 너무 그립다...
OS가 hardware와 software 사이에 있는 software다 보니 hardware에 대해서 좀 알아야 이해할 수 있는 것들이 많습니다. 최소한 다음 질문에는 대답할 수 있는게 앞으로 프로젝트를 진행하는데 도움이 될 것이라 생각합니다.
(사실 CS:APP 3장을 차근차근 읽어 놨다면 아는 내용입니다.)
현재 실행 중인 명령어를 중단하고, 인터럽트를 처리하기 위해 인터럽트 서비스 루틴의 주소로 이동한다.
현재의 프로세스 상태를 저장하고, 인터럽트 서비스 루틴에서 필요한 레지스터 및 메모리 상태를 설정한다.
인터럽트 서비스 루틴을 실행한다.
인터럽트 발생 전의 레지스터 값들은 스택에 저장된다. 보통은 프로그램 카운터(PC), 스택 포인터(SP), 그리고 다른 중요한 레지스터들의 값들이 저장된다.
현재의 프로세스 상태는 스택이나 다른 메모리 영역에 저장된다. 이것은 후에 인터럽트 서비스 루틴이 종료되고 원래 프로세스로 복귀할 때 사용된다.
인터럽트가 disable된 상태에서는 인터럽트가 발생해도 CPU가 해당 인터럽트를 무시한다.
인터럽트가 enable된 상태에서는 인터럽트가 발생하면 해당 인터럽트 서비스 루틴을 실행한다.
Option: NMI (Non-Maskable Interrupt)는 무엇인가?
다른 일반적인 인터럽트들과는 달리 CPU가 무시할 수 없는 중요한 인터럽트이다.
NMI는 보통 하드웨어적인 문제나 시스템의 심각한 오류를 나타내기 위해 사용된다. 예를 들어, 메모리 에러, 전원 공급 장애, 시스템 보호 기능에 대한 경고 등과 같은 상황에서 발생할 수 있다.
NMI는 CPU의 작동을 중단하고, 해당 오류나 문제를 해결하기 위한 특수한 처리를 수행하기 위해 사용된다. 이는 시스템의 안정성을 보장하고, 잠재적인 문제를 신속하게 해결할 수 있도록 한다.
일반적으로 NMI는 프로그래머가 직접적으로 트리거할 수 없으며, 하드웨어나 시스템의 상태에 의해 자동으로 발생한다.
하드웨어 타이머에 의해 발생시킨다.
컴퓨터 시스템은 보통 하드웨어적으로 타이머를 가지고 있으며, 이 타이머는 시스템 클록이나 외부 클록 신호를 기반으로 정밀한 시간을 계산하는 데 사용된다. 타이머는 프로그램 가능한 인터럽트 컨트롤러 (PIC)나 타이머 칩과 같은 장치에 의해 관리되며, 설정된 시간 간격이 지나면 타이머 인터럽트가 발생한다.
EFLAGS 레지스터는 x86 아키텍처에서 사용되는 특별한 레지스터로, 다양한 프로세서 상태를 나타내는 플래그들을 포함한다. 이 플래그들은 프로세서의 동작을 제어하고 상태를 나타내며, 조건부 명령어 실행과 같은 작업에서 사용된다.
EFLAGS 레지스터에는 다양한 플래그들이 있다. 예를 들어, Carry Flag(CF), Zero Flag(ZF), Sign Flag(SF), Overflow Flag(OF) 등이 있으며, 각각은 서로 다른 프로세서 상태를 나타낸다.
Carry Flag (CF): 연산 결과에서 발생한 캐리를 나타낸다. 주로 부호 없는 산술 연산에서 사용된다.
Zero Flag (ZF): 연산 결과가 0이면 설정된다.
Sign Flag (SF): 연산 결과의 부호를 나타낸다.
Overflow Flag (OF): 부호 있는 정수 연산에서 발생한 오버플로우를 나타낸다.
c언어를 하면서도 열심히 포스팅 올리면서 정리했다고 생각했는데 이번주는 역대급으로 열심히 포스팅 했던 것 같다. 그만큼 공부한것도 많았고?... 팀원분께서 핀토스 했다고 말하는게 다가 아니라 핀토스를 뜯어보면서 다 이해했다고 말해야하지 않겠냐는 말씀에 더 열심히 했다... 프젝2는 진짜 프젝1보다 몇배는 더 힘들다. 누가 떠 먹여서 공부 좀 시켜줬음 좋겠을 지경이다... ㅠㅠ
너무너무 힘들다 ... 태훈님은 자꾸 와플대학만 먹자하고... 늦게오고... 일찍일찍 옵시다.