Virtual Address

Virtual Address 64-비트 가상 주소는 다음과 같은 구조이다 1 2 3 4 5 6 7 8 63 48 47 39 38 30 29 21 20 12 11 0 +-------------+----------------+----------------+----------------+-------------+------------+ | Sign Extend | Page-Map | Page-Directory | Page-directory | Page-Table | Physical | | | Level-4 Offset | Pointer | Offset | Offset | Offset | +-------------+----------------+----------------+----------------+-------------+------------+ | | | | | | +------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+ Virtual Address 헤더 include/threads/vaddr.h, 그리고 include/threads/mmu.h는 가상 주소들에서 작동하는 이러한 함수들과 매크로들을 정의한다. (offset : 상대주소(relative address), 동일 오브젝트 안에서 오브젝트 처음부터 주어진 요소나 지점까지 변위차를 나타내는 정수형) ...

2023년 4월 30일 · 3 분 · 배준수

Pintos 2주차 컴퓨터 시스템 용어 정리

Pintos 2주차 keyword 정리 1. Process Controll Block ID : 고유 이름 State : Ready, wating, terminated 등 Program Counter : 특정 프로세스가 실행해야 하는 다음 instruction의 주소를 나타낸다. CPU Registers : 특정 프로세스가 사용하고 있는 레지스터(index register, stack pointer, general purpose register, …) Memory limits List of open files CPU scheduling information : 프로세스의 우선순위. 스케쥴링 큐를 가리키는 포인터나 다른 스케쥴링 parameter. memory management information : 특정 프로세스에 의해 사용되는 메모리에 관한 정보 ...

2023년 4월 29일 · 8 분 · 배준수

Pintos 2주차 도입

Project2 : User Program 유저 프로그램을 실행하게 하는 시스템에 대해 배운다. 유저프로그램 로딩, 실행은 이미 있으나, I/O,나 상호작용은 불가능한 상태 이 프로젝트에서 시스템 콜을 통해 운영체제와 프로그램이 상호작용 하도록 해야 한다. userprog 디렉토리에서 하면 된다. project1 위에서 진행된다. project1의 코드가 project2 코드에 영향을 끼치진 않지만 이후에도 project1 테스트는 통과해야 한다. 추가 도전과제 옵션도 있음. 옵션에서는 기초 코드 틀이 없이 완전히 작성해야함. userprog/Make.vars 를 수정해야함 Background 지금까지 Pintos에서 실행해온 코드는 운영체제 커널의 부분이였다. 즉, 시스템의 privileged parts까지 완전히 접근이 가능하였다. 운영체제 꼭대기에서 유저프로그램을 시작하면, 더이상은 힘들다. 이 프로젝트가 다룰 부분이다. ...

2023년 4월 28일 · 8 분 · 배준수

PintOS Project1-1 WIL

PintOS Project1-1 Alarm Clock 구현 개요 기간 : 2023년 4월 20일 ~ 27일 주제 : Threads 과제 Alarm Clock Priority Scheduling Advanced Scheduler 배경지식 1. interrupt 기본 개념 CPU의 명령 수행속도에 비해 I.O(입출력) 연산의 속도는 훨씬 느리다. I.O 연산을 위해 CPU가 쉬면서 기다리는 것은 낭비다. I.O 연산 중에 CPU는 다른 일을 하고 있는다. I.O 연산 결과가 나오면 CPU에게 알린다. => “Interrupt” 정의 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우에 마이크로프로세서에서 알려 처리할 수 있도록 하는 것. 하드웨어 interrupt와 소프트웨어 interrutp로 나뉜다. trap이라고도 일컬어지며 프로세서에게 최근에 실행된 코드의 중단을 요청해서 event가 때맞은 방식으로 처리될 수 있도록 하는 것. 요청이 받아들여지면, 프로세서는 최근 활동을 중단시키고 state를 저장한 후 event를 처리하기 위해 interrupt handler(ISR, interrupt service routin)라고 불리는 함수를 실행한다. 종류 ...

2023년 4월 27일 · 8 분 · 배준수

PintOS Project1-2 WIL

Pintos Project 1-2 Priority Scheduling 구현 배경지식 1. Round Robin(RR) Scheduling 프로세스와 네트워크 스케쥴러에서 이뤄지는 알고리즘 중 하나이다. 일반적으로 time slice가 각 프로세스에서 동일한 부분만큼 순환하는 순서로 배당되어 모 프로세스들을 우선순위 없이 다룬다는 의미이다. 수행하기 간단하고 쉬우며 starvation-free(공평하게 모두 나눠가짐)가 특징이다. 2. Priority Donation(Priority Inheritance) unbounded inversion(끝없는 우선순위 도치)을 제거하기 위한 방법이다. 이 알고리즘은 우선순위가 가장 높은 프로세스 A가 있다고 가정한다면, A가 필요한 lock의 holder인 다른 프로세스의 우선순위를 A만큼 증가시키는 것이다. 그 결과 우선순위가 증가한 프로세스가 우선적으로 실행되고 hold한 lock을 release하면 프로세스 A가 실행될 수 있게 된다. 즉, A가 우선순위에 따라 가장 먼저 실행되기 위해서 필요한 것들(lock과 같은)을 확보하기 위해 다른 누군가에게 A 자신의 우선순위를 부여해 주는 것이다. ...

2023년 4월 27일 · 7 분 · 배준수

Pintos 1주차 컴퓨터 시스템 용어 정리2

컴퓨터 시스템 관련 용어 정리 Priority Donation(Priority inheritance) priority inheritance는 무한한(unbounded) 우선순위 도치(inversion)을 제거하기 위한 방법이다. 이 프로그래밍 방식을 쓰는 프로세스 스케쥴링 알고리즘은 A가 resourece lock이 되어있는 어떤 자원을 기다리는 다른 프로세스들의 우선순위 중 최댓값으로 A의 우선순위를 증가시킨다. priority inheritance protocol의 기본 아이디어는 한 작업이 더 높은 우선순위의 작업에게 가로막혔을 때, 그 작업이 원래의 우선순위를 무시하고 상승한 우선순위 수준에서 1(임계 영역)을 수행하는 것이다. critical section(임계 영역)을 수행하고 lock을 release하고 나면, 포로세스는 원래의 우선순위 수준으로 돌아간다. ...

2023년 4월 22일 · 7 분 · 배준수

Pintos 1주차 Synchronization

Synchronization 쓰레드간 자원 분배 : 조심히 다뤄야 한다. A cooperating process는 시스템에서 다른 프로세스가 실행됨으로써 영향을 주거나 받을 수 있는 것을 의미한다. cooperating process는 직접적으로 논리적 주소(code, data 둘다)를 공유할수도, 파일이나 메세지를 통해서만 데이터를 공유하도록 허용될수도 있다. 공유 데이터로의 동시적(concurrent) 접근은 data 모순(inconsistency)를 야기할 수 있다. 논리적인 주소 공간을 공유하는 협동 프로세스들의 순차적 실행을 확보하여 데이터 동일성을 유지하는 메커니즘에 대해 논해보자. (Producer Consumer Problem에 이어짐.) Disabling Interrupts 가장 기초적인 방법 : CPU가 interrupts에게 반응하는 것을 일시적으로 막는 것 ...

2023년 4월 21일 · 15 분 · 배준수

Pintos 1주차 컴퓨터 시스템 용어 정리

컴퓨터 시스템에 관한 용어 정리 1. Interrupt, interrupt handler trap이라고도 일컬어지는 interrupt는 프로세서에게 최근에 실행된 코드를 중단을 요청해서 event가 때맞은 방식으로 처리될 수 있도록 하는 것이다. 만약 요청이 받아들여지면, 프로세서는 최근 활동을 중단시키고 state를 저장한 후 event를 처리하기 위해 interrupt handler(ISR, interrupt service routine라고도 함)라고 불리는 함수를 실행한다. 이 개입은 보통 일시적이며 비록 interrupt가 치명적인(fatal) error를 표시하는 방법이 있을지라도, interrupt handler가 일을 마친 후 소프트웨어가 평범한 활동을 재개하도록 해준다. interrupt는 시간과 관련된 감지능력이 필요한 전기적, 물리적 상태 변화를 나타내기 위해 보통 하드웨어 장치에서 사용된다. 또한 공통적으로 실시간 컴퓨팅(real-time computing)같은 컴퓨터 멀티태스킹 수행에 사용된다. 그러한 방식들로 interrupt를 사용하는 시스템은 interrupt-driven이라고 일컬어진다. ...

2023년 4월 21일 · 5 분 · 배준수

착각에서 빠져나오기

마음이 힘들어지니 다시금 에세이를 쓰려고 한다. 어느덧 저번 에세이를 쓴지 3주 지났고, 이곳에 들어온 지 두 달이 가까워진다. 초심을 유지하고 있냐고 스스로에게 묻자면 그런 척만 하고 있다고 대답하고 싶다. 내가 에세이를 쓰며 스스로를 되돌아 보기로 한 이유이기도 하다. 지난 7주간 치열하게 살았다. 그리고 여전하다. 1시에 자고 7시에 일어나 운동도 하고 공부도 하며 규칙적인 삶을 살고 있다. 하지만 내가 보내는 시간의 질을 생각하면 분명 나는 그새 달라진게 분명한 것 같다. 개발자 커리어의 관점에서 내 스스로를 여전히 별볼일 없고 아는 것 없는 허접한 사람이다. 꿈은 원대하게 갖고 있지만 현재의 내 상황에 대해선 부정할 생각은 추호도 없다. 하지만 어느 순간, 내가 소위 머리 좀 컸다고 느껴졌다. 내가 처참한 기분으로 시작한 이유는 내 위치를 처절하게 깨달았기 때문이다. 힘들고 갈 길도 멀지만, 어제보다 나으니까라는 위로로 매일을 버텼다. 어느 순간, 그 생각에 매몰된 것 같다. ‘나는 어제보다 나은 사람이다.’ 나아가야 할 길이 한참 멀었는데, 고작 7주 짜리 발전에 신났다. ...

2023년 4월 17일 · 4 분 · 배준수

malloc을 구현하는 방법

메모리 구조 프로그램 실행 시 운영체제에 의해 마련되는 메모리의 구조는 다음과 같다. 코드 영역(code Area) 실행할 프로그램의 코드가 저장되는 메모리 공간. CPU는 코드 영역에 저장된 명령문들을 하나씩 가져가서 실행한다. 데이터 영역(Data Area) 전역 변수와 static 변수가 할당된다. 프로그램의 시작과 동시에 메모리에 할당되어 프로그램 종료 시까지 남아있다. main 함수가 호출되기 이전에 데이터 영역이 먼저 초기화되고, (return문이 실행되어) 프로그램이 종료된 이후에 운영체제에 의해 할당된 메모리 공간 전체를 반환하는데, 이때가 전역 변수가 소멸하는 시점이다. ...

2023년 4월 12일 · 6 분 · 배준수