
테스트 | 테스트 이름 | 목적 | | ------------------ | ---------------------------------- | | alarm-single | 여러
목차 스레드와 우선순위란? Priority Scheduling (우선순위 스케줄링) Preemption (선점) Priority Inversion (우선순위 역전 현상) Priority Donation (우선순위 기부) Donation Chain (도네이션 체인) Donation 복구 (Rollback) Ready List와 정렬 기준 락(Lock), 세...
alarm-priority 테스트 통과 여러 스레드가 동일한 시간에 깨어날 때, 우선순위(priority)가 높은 스레드가 먼저 실행되도록 보장해야 함처음에는 alarm-priority 테스트가 다음과 같은 이유로 실패함:ready_list에 스레드를 삽입할 때 우선
운영체제를 배우다 보면 처음 마주하는 개념 중 하나가 뮤텍스(Mutex)다.뮤텍스는 여러 스레드가 동시에 어떤 자원(파일, 메모리 등)을 사용하려고 할 때서로 충돌하지 않도록 도와주는 장치다.뮤텍스(Mutual Exclusion)는 말 그대로 상호 배제라는 뜻이다.이는
앞선 글에서 뮤텍스(Mutex)를 통해 한 번에 하나의 스레드만 자원을 사용하는 구조를 살펴보았다.이번에는 뮤텍스를 일반화한 개념인 세마포어(Semaphore)를 알아보자.세마포어는 동시에 여러 개의 자원을 관리할 수 있다는 점에서 뮤텍스보다 확장된 구조다.세마포어는
목표: priority 관련 12개 테스트 전부 통과하기오늘은 그 첫 번째 단계로, 스레드 우선순위 기반 스케줄링의 정렬 구조를 구현하고priority-fifo, priority-preempt 테스트를 성공시킨 기록을 정리한다.✅ 현재 통과한 테스트:priority-f
레지스터(Register)는 CPU 내부에 내장된 초고속 저장 공간이다.모든 계산과 데이터 처리의 출발점이자 종착점으로, 프로그램이 실행될 때거의 모든 연산은 Register를 거친다.CPU가 어떤 데이터를 다루든 반드시 레지스터에 먼저 올려야 처리할 수 있다.속도:
Memory(메모리)는 흔히 RAM(Random Access Memory)이라고 불리며,프로그램이 실행되는 동안 코드, 변수, 함수 정보 등 모든 실행 데이터를 담는 저장소이다.💡 CPU가 연산을 하기 전, 메모리에서 필요한 데이터를 가져와 레지스터에 올린다.운영체제
rax는 x86_64 아키텍처에서"Return value Accumulator Register"의 약자로,산술 연산 결과 및 함수 반환값을 저장하는 역할을 가진 중심 레지스터이다.eax (32비트), ax (16비트), al (8비트)와 같은 이름으로도 하위 호환됨mo
CPU는 빠르고 메모리는 느리다.이 속도 차이는 100배 이상 나기도 한다.따라서 병목현상이 일어난다.CPU는 1ns 단위로 연산함메모리는 100ns~200ns 걸림→ CPU가 데이터를 기다리는 동안 놀고 있게 된다.그래서 등장한 것이 Cache(캐시).자주 쓰는 데이
32비트와 64비트의 차이는 ‘한 번에 처리할 수 있는 정보량’과 ‘다룰 수 있는 메모리 크기’의 차이이며, 프로그램의 성능과 범위를 결정짓는 아주 중요한 요소이다.컴퓨터는 모든 데이터를 숫자로 처리하며,이 숫자를 계산하거나 저장할 때 쓰는 공간이 \*\*레지스터(Re
이번 주 Jungle Week10~11에서는 PintOS: User Programs 단계를 진행하며,아래 테스트케이스들을 모두 통과해야 한다.특히 이전 단계에서 구현한 기능들이이번 주 시스템콜, 프로세스 실행 로직 등에 의해망가질 수도 있기 때문에, 전체 테스트의 재검
PintOS Project 2에서 Argument Passing을 구현할 때, 단순히 스택에 값을 쌓는 것으로 끝나는 것이 아니다. 이 과정 앞에는 반드시 Argument Parsing, 즉 문자열을 의미 단위로 쪼개는 단계가 필요하다. 이 글에서는 파싱(Parsing
args-none, args-single, args-multiple, args-many, args-dbl-space테스트를 통과하는 것이 이번 구현의 목적이다.해당 테스트들은 사용자 프로그램이 실행될 때명령줄 인자(argument)가 정확히 유저 스택에 세팅되었는가를
운영체제는 사용자 프로그램(user program)이 직접 하드웨어나 커널 자원에 접근하는 걸 금지한다. 대신, 사용자 프로그램이 운영체제에 요청(Request) 하는 공식적인 인터페이스가 있는데, 이것을 시스템 콜(System Call) 이라고 부른다.간단히 말해:"
PintOS User Programs 프로젝트에서 통과해야 할 테스트는 수십 개가 넘습니다.따라서 우리는 시스템 콜 중심으로 테스트케이스를 정리하고, 책임 분담하여 효율적으로 진행합니다.담당: 이순간int create (const char \*file, unsigne
시스템 콜은 유저 프로그램이 커널에게 작업을 요청하는 창구입니다. 예를 들어, 사용자가 open("file.txt")라고 작성하면 이는 "이 파일을 열어달라"는 요청이며,커널은 시스템 콜을 통해 이를 처리합니다.PintOS에서는 sys_create, sys_open,
1. 목표 유저 프로그램에서 create() 시스템 콜을 호출했을 때, 파일을 생성하고 성공 여부를 반환하도록 커널 코드를 구현합니다. NULL, 비정상 포인터, 파일 이름 길이 제한 등의 다양한 상황에 대한 예외 처리를 포함해야 합니다. 2. 수정한 파일 userprog/syscall.c userprog/syscall.h 3. syscall.c...
유저 프로세스는 직접 커널의 파일 구조체에 접근할 수 없다.그래서 커널은 유저에게 숫자 하나(정수)를 준다.그게 바로 파일 디스크립터 (File Descriptor, FD)다.FD는 유저가 파일 입출력을 하기 위한 간접적인 핸들이다.시스템 콜을 통해 read(fd, b
int sys_open(const char \*file);유저 프로그램이 open()을 호출했을 때파일 시스템에서 해당 이름의 파일을 찾아 열고파일 디스크립터(fd)를 반환실패 시 -1 반환threads/thread.hthreads/thread.cuserprog/sys
void sys_close(int fd);유저 프로그램이 close(fd)를 호출했을 때해당 fd가 가리키는 열린 파일을 닫고자원을 해제하며, fd를 무효화유효하지 않은 fd는 무시userprog/syscall.cuserprog/syscall.h※ open() 구현 시
가상 메모리는 프로그램이 실제 물리 메모리의 한계를 몰라도 되도록 운영체제가 가상의 주소 공간을 제공하는 기술이다. 프로그램은 자신만의 연속된 가상 주소를 사용하지만, 실제로는 여러 프로세스가 물리 메모리를 공유하며 사용한다.간단히 말해:"실제로는 조각난 물리 메모리를
Frame Table은 운영체제의 가상 메모리 시스템에서 물리 메모리 페이지(프레임)를 전역적으로 관리하기 위한 자료구조이다. 운영체제의 가상 메모리는 프로세스마다 각기 다른 가상 주소 공간을 제공하고, 이 가상 주소는 실제 물리 메모리의 프레임으로 매핑된다. 이때 물