728x90
반응형

운영체제 13

PintOS 프로젝트 3주차 중간 정리와 의문점들 ( TLB, Belady's Anomaly, Thrashing, Dirty Page, Supplemental Page Table )

페이지 테이블 접근 시 TLB가 어떻게 페이지 테이블의 성능을 향상시키는가?- TLB는 자주 사용되는 주소 변환 정보를 빠르게 참조할 수 있도록 하는 "캐시 메모리" 이다.- TLB에 원하는 주소 변환 정보가 있으면, 페이지 테이블을 참조하지 않고 바로 물리적 주소를 얻을 수 있어 성능이 향상된다. TLB Miss일 때 시스템은 어떤 과정을 거쳐 메모리에 접근하는가?- TML Miss일 때 시스템은 페이지 테이블을 조회하여 물리적 주소를 찾은 후, 추후 빠르게 접근할 수 있도록 정보를 TLB에 업데이트한다.   Belady의 역설(Belady's Anomaly)- 페이징 기법을 사용하는 메모리 관리 시스템에서, 프레임 수를 늘리는데도 page fault가 발생하는 빈도가 늘어나는 현상 Belady의 역설..

PintOS 프로젝트 3주차 키워드 정리 ( Virtual Memory, Page Table, TLB, Page Fault, Lazy Loading, PRP, DMA )

Virtual Memory물리적 메모리(RAM)의 제한을 극복하고 효율적인 메모리 관리 및 프로세스 격리를 위해 사용되는 중요한 개념 Virtual Memory 개념- 각 프로세스는 독립적인 가상 주소 공간을 갖는다. 이는 프로세스가 자신의 메모리 공간을 다른 프로세스와 공유하지 않고, 독립적으로 사용할 수 있도록 한다.- 가상 메모리와 물리 메모리는 모두 고정된 크기의 블록으로 나뉜다. 가상 메모리 블록을 "페이지" 라고 하고, 물리 메모리 블록을 "페이지 프레임" 이라고 한다.   Page Table가상 메모리를 물리 메모리로 매핑하는 데 사용되는 데이터 구조. 각 프로세스는 독립적인 가상 주소 공간을 가지며, 페이지 테이블은 이 가상 주소를 물리 주소로 변환(매핑)하는 역할을 한다. Page Tab..

PintOS 프로젝트 2주차 키워드 정리 ( User mode, Kernel mode, Register, Memory, System Call, File Descriptor, Cache, Atomic Operation, %rax, 32bit OS, 64bit OS, interrupt, Segmentation Fault )

User mode vs Kernel mode리눅스 운영체제는 User mode와 Kernel mode라는 두 가지 주요 실행 모드를 가지고 있다. 커널 모드(Kernel mode)- 운영체제의 핵심 부분인, "커널"이 실행되는 모드- 하드웨어에 대한 완전한 접근 권한을 가진다. -> 메모리, 프로세스 스케줄링, 파일 시스템 관리, 네트워킹 같은 low level 작업을 수행할 수 있다.- 시스템의 모든 자원을 제어할 수 있기 때문에, 커널 모드에서의 오류는 시스템에 심각한 영향을 미칠 수 있다.- 커널 모드에서는 시스템 모든 자원에 접근할 수 있는 광범위한 권한을 가지며, 따라서 커널 모드의 프로세스들은 메모리 공간을 공유한다. 사용자 모드(User mode)- 일반 응용 프로그램이 실행되는 모드- 커널..

PintOS 프로젝트 2주차 [User Programs / System Call] (2)

95개의 테스트 케이스 중 15개를 실패한 코드입니다. 주의해서 참고하세요.pass tests/userprog/args-nonepass tests/userprog/args-singlepass tests/userprog/args-multiplepass tests/userprog/args-manypass tests/userprog/args-dbl-spacepass tests/userprog/haltpass tests/userprog/exitpass tests/userprog/create-normalpass tests/userprog/create-emptypass tests/userprog/create-nullpass tests/userprog/create-bad-ptrpass tests/userprog/cr..

PintOS 프로젝트 2주차 [User Programs / System Call] (1)

95개의 테스트 케이스 중 15개를 실패한 코드입니다. 주의해서 참고하세요.pass tests/userprog/args-nonepass tests/userprog/args-singlepass tests/userprog/args-multiplepass tests/userprog/args-manypass tests/userprog/args-dbl-spacepass tests/userprog/haltpass tests/userprog/exitpass tests/userprog/create-normalpass tests/userprog/create-emptypass tests/userprog/create-nullpass tests/userprog/create-bad-ptrpass tests/userprog/cr..

PintOS 프로젝트 2주차 커널 모드, Context Switching, fsync()

1.1 커널 모드에서 실행될 수 있는 작업-> 공유 자원 관리- 공유 자원 관리는 운영체제의 중요한 기능 중 하나로, 주로 커널 모드에서 실행된다.- 파일시스템, 메모리, 프린터 등과 같은 자원은 여러 프로세스에 의해 동시에 요청될 수 있기에, 접근과 사용을 적절히 관리하는 것이 필수적이다.- 커널 모드는 이러한 자원들에 대한 접근을 제어하고 충돌/데이터 손상을 방지한다. 1.2 공유 자원 관리가 사용자 모드에서 실행되지 않는 이유- 여러 사용자 또는 프로세스가 자원에 직접 접근할 경우, 데이터의 일관성과 안정성이 위협받을 수 있기 때문이다.  2. 운영체제에서 Context Switching이 발생하는 과정에서 어떤 정보가 저장되고 복원되는가?- 현재 프로세스의 상태(Context, 문맥)를 저장하고 ..

PintOS 프로젝트 2주차 [User Programs / Argument Passing]

PintOS는 Command Line에 명령어를 받아 프로그램을 실행할 때, 인자를 인식하지 못한다.ex ) /bin/ls -l foo bar  일 경우, 명령(파일명)과 인자를 나누지 못하고 전부 하나로 인식 Argument Passing은 PintOS의 이러한 점을 개선하여 PintOS가 명령에 대한 파일명과 인자를 구분하여 받을 수 있도록 하는 것이 목표이다. 명령어와 인자들은 command Line으로 입력된 후 process_exec 함수에서 argv 배열에 저장되며, argc 변수엔 인자의 개수가 저장된다. (파일명도 인자다)argv, argc를 이용하여 인자들은 Stack에 저장되어 User Program이 사용하게 되는데, 우리가 Stack에 저장되도록 구현해야 한다.  %rsp는 스택 포..

PintOS 프로젝트 1주차 [Threads / 트러블 슈팅]

Alarm Clock1. sleep_list 정렬기존 thread_sleep() 함수에서는 sleep_list에서 깨울 스레드를 찾기 위해 모든 리스트 요소를 다 뒤져야 했다.따라서 불필요한 리스트 순회가 존재했다.// 로컬틱 넣고, state 변경하고, sleep_list에 넣고, 스케줄러 호출하기void thread_sleep(int64_t ticks) {     ......생략.....        // 현재 스레드가 idle이 아닐 경우    if(curThread != idle_thread) {                // 로컬 틱 설정        curThread->localTick = ticks;                // localTick 기준으로 정렬되어 삽입        li..

PintOS 프로젝트 1주차 [Threads / Priority Donation]

이전 Priority Scheduling과 이어지는 글이다.이 글에서는 저번 글에 이어서, Priority Donation을 구현하는 것을 메인으로 다룬다.  thread.hstruct thread {    /* Owned by thread.c. */    tid_t tid;                          /* Thread identifier. */    enum thread_status status;          /* Thread state. */    char name[16];                      /* Name (for debugging purposes). */    int priority;                       /* Priority. */    ..

PintOS 프로젝트 1주차 [Threads / Priority Scheduling]

Priority Scheduling은 우선순위 스케줄링을 의미한다. Alarm Clock에서는 ready_list에 우선순위를 생각하지 않고 스레드를 삽입했고, 모든 스레드가 공평하게 CPU를 사용했기에 더 자주 CPU를 사용해야 할 스레드가 자주 CPU를 사용하지 못해서 비교적 비효율적 이었다.(FIFO방식) 이번엔 스레드마다 우선순위(Priority)를 부여해서 ready_list에 우선순위 순으로 정렬하여 삽입하고, 우선순위가 높은 스레드부터 CPU를 점유하도록 개선할 것이다. 또한, 이미 특정 스레드가 CPU를 사용하고 있더라도 더 높은 우선순위의 스레드가 ready_list에 들어오면 CPU를 빼앗는 선점(Preemption)도 구현할 것이다. 단 timer_interrupt마다 thread_a..

728x90
반응형