728x90
반응형

크래프톤 정글/TIL 41

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 프로젝트 3주차 발제 후 티타임 / 이력서와 면접에 관한 팁들

자기소개서- 좋은 스토리텔링 만들기- 포트폴리오나 작업물에 대한 트러블 슈팅 과정 설명- 팀 작업이라면 내 역할에 관한 확실한 이해- 이런거 저런거 해봤다 구구절절 말하기 X, 나의 성장에 관해 큰 틀로 스토리텔링 만들기.  어차피 자잘한 거 해본 건 면접관에게 크게 중요한 점들이 아니다. 이력서를 최대한 많이 내고, 면접 경험을 최대한 많이 가져봐야 한다- 크게 가고싶지 않은 회사라도 최대한 많이 지원하기- 이력서를 조금씩 수정하여 여기저기 내 보면서, 어떤 식의 이력서가 먹히는지 파악할 수 있다.- 면접도 마찬가지로, 여기저기 면접을 다녀 보면서 어떤 말을 어떤 식으로 하면 면접관에게 어필이 되는지 파악하고 성장해 나갈 수 있다.- 1승만 하면 된다. 한 번만 붙으면 된다. 합격 확률을 조금이라도 높..

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. */    ..

728x90
반응형