728x90

JUNGLE 23

24.04.19 C++

C++ C++ 입출력 성능 향상 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); c++에서 ios::sync_with_stdio, cin.tie, cout.tie를 사용하는 주된 이유는 입출력 성능을 향상시키기 위해서 이다. ios::sync_with_stdio(false); 이 함수는 c++ 표준 입출력 스트림(cin, cout)과 c 표준 입출력 버퍼(stdin, stdout)의 동기화를 해제한다. 기본적으로 c++ 표준 입출력은 c의 표준 입출력과 동기화되어 있어서 입출력 작업 시 버퍼를 공유하고 동기화하는 과정에서 오버헤드가 발생한다. ios::sync_with_stdio(false);를 호출하면 c++과 c의 입출력 버퍼가 분리되어 동기..

11Week 24.03.28 - 24.04.03 부제 : 야호!!

회고 야호!! 야호를 몇 번째 쓰는 줄 모르겠다. 하지만 진짜 정말로 즐겁다. 왜냐!! 왜냐하!!!!!!!! 왜냐하면!!!!!!!!!!!!!!!!!!! 잘 끝마쳤으니까 project 1,2,3 중 가장 힘들었지만, 가장 성취감있고, 가장 재미있었다. vm에 대해서 이론적으로 알고 있던 부분을 구현을 하면서 다양한 트러블 슈팅을 겪을 수 있었고, 개인적으로 많이 성장하는 시간을 가질 수 있었다. 핀토스 주차가 드디어 끝났다. 하지만 아직은 내가 했던 것들이 완전하게 내 것이 되었냐 하면 그것은 아니다. 내것으로 만드는 시간과 새로운 공부를 하는 시간의 비율을 잘 지켜 더욱 더 성장할 수 있게 해야겠다. 하루하루 강해지는 나.. 사이어인 아닐까? 더 더 더더더더더 강해지고 싶다. 할 수 이따!! KPT 회고..

24.03.31 운영체제, PintOS

운영체제 33. 데이터 무결성과 보호 33.1 디스크 오류 모델 디스크는 완전하지 않으며 오류가 발생할 수 있다. 현대의 디스크들은 정상적으로 동작하는 것처럼 보이지만 블럭들을 읽는데 실패하는 경우가 있다. 우리가 살펴볼 만한 것은 두 가지 종류의 단일 - 블럭 오류가 있다. 각각은 숨어있는 섹터 에러(Latent Sector error, LSE)와 블럭손상(block corruption)이다. LSE는 디스크 섹터가 어떤 이유로든 손상되었을 때 발생한다. 예를들어, 디스크 헤드가 표면에 어떤 이유로 닿았다면(head crash, 일반적인 상황에서는 일어나면 안된다) 표면을 망가뜨릴것이고 비트들을 읽을 수 없게 만든다. 강한 방사선도 역시 비트를 반전시켜서 내용을 부정확하게 만들 수 있다. 다행스러운 것..

24.03.27 운영체제, PintOS, 백준

운영체제 29. Redundant Array of Inexpensive Disk(RAID) 여러개의 디스크를 조화롭게 사용하여 고속이면서 대용량의 신뢰할 수 있는 디스크 시스템을 만든다. 외면적으로 RAID는 하나의 디스크 처럼 보인다. 읽거나 쓸 수 있는 블럭의 그룹으로 보인다. 안을 들여다보면 RAID는 여러개의 디스크와 메모리, 시스템을 관리하기 위한 하나 또는 그 이상의 프로세스로 이루어진 복잡한 기계이다. RAID 하드웨어는 컴퓨터 시스템과 매우 유사하며 디스크의 그룹을 관리하기 위한 전용 시스템이다. RAID는 단일 디스크에 비해 여러 장점들을 제공한다. 하나의 장점은 성능이다. 디스크를 여러개 병렬적으로 사용하면 I/O 시간이 크게 개선된다. 또 다른 장점은 용량이다. 데이터의 양이 많아지면..

24.03.26 퀴즈, 운영체제, PintOS, 백준

퀴즈 1. 페이지 테이블 접근 시 TLB가 어떻게 페이지 테이블의 성능을 향상시키는지 설명하고, TLB miss가 발생하면 시스템이 어떤 과정을 거쳐 메모리에 접근하는지 설명하세요. TLB는 자주 사용되는 주소 변환 정보를 빠르게 참조할 수 있도록 하는 캐시 메모리이다. TLB에 원하는 주소 변환 정보가 있으면, 페이지 테이블을 참조하지 않고 바로 물리적 주소를 얻을 수 있어 성능이 향상된다. TLB miss일 대 시스템은 페이지 테이블을 조회하여 물리적 주소를 찾고, 이 정보를 TLB에 업데이트 한다. 2. 페이징 기법을 사용하는 메모리 관리 시스템에서, 페이지 프레임 수를 늘리는데도 page fault가 발생하는 빈도가 오히려 늘어나는 경우가 있습니다. 이를 Belady의 역설이라고 하는데, 이런 현..

Project2. User Program

Project2. User Program Git Book https://github.com/jaenam615/pintos-kaist GitHub - jaenam615/pintos-kaist: 크래프톤 정글 4기 pintOS과제 Project 1 & 2 크래프톤 정글 4기 pintOS과제 Project 1 & 2. Contribute to jaenam615/pintos-kaist development by creating an account on GitHub. github.com Krafton Jungle Week 7 Team 6 WIL Project 2 User Programs: 느낀점 참 더 어려워지기 힘들겠다라는 생각을 계속해서 무시하고 난이도는 계속 올라가는것이 신기하다. 앞으로 취직이나 살아가면서..

Study/PintOS 2024.03.21

9Week 24.03.14 - 24.03.20 부제 : 구현의 재미!

회고 Project1이 끝난지 얼마나 됐다고, 2도 끝났다. 그냥 작동 결과만 알고 있던 syscall들에 대해서 구현을 해보니 뭔가 신기하기도 하고 어렵기도 했다. 사실 어려운게 매우매우맹무ㅐㅇ무앰우ㅐㅁ우낭ㅁ 매우 컸다. 너무 너뭉 어려워잉.. 파일 디스크립터의 관리라든가 fork, exec, wait으로 이어지는 삼단콤보라든가 너무 강한 적이었다. 아주 아주 골치아픈 친구들이었어.. 아무튼! 그럼에도 불구하고! 열시밓 밈…밓.. 잘 격파했다. 어려웠지만 그래도 꽤나 많이 뿌듯했다. 아직은 완전히 나의 지식은 아니지만 천천히 복습하고 다시보고 하면서 내 것으로 만드는 시간을 가져야 겠다. KPT 회고 Keep, Problem, Try의 약자로 Keep은 잘 한 것, Problem은 아쉬운 것, Try는..

24.03.20 PintOS

PintOS Project2가 끝이났다. 처음에는 엄청 어려웠지만 끝나는 오늘와서 생각해보니 더 어려웠다. fork ,wait 진짜 미친 난이도 정말 너무 너무 어려웠다. Project 정리로 한번에 정리해서 올리도록 하겠다. wait , exec, fork 개발을 완료했다. 아쉽게 multi_oom은 테스트 통과하지 못했다 ㅠㅜㅠ tid_t process_fork (const char *name, struct intr_frame *if_) { /* Clone current thread to new thread.*/ struct parent_info my_data; my_data.parent = thread_current(); my_data.parent_f = if_; struct thread *cur ..

24.03.19 퀴즈, 운영체제, PintOS

퀴즈 1. 커널 모드에서 실행될 수 있는 작업의 예를 들고, 이러한 작업들이 사용자 모드에서 실행되지 않는 이유를 설명하세요. 공유 자원 관리는 운영체제의 중요한 기능 중 하나로, 주로 커널 모드에서 실행된다. 예를 들어, 파일 시스템, 메모리, 프린터 등과 같은 자원은 여러 프로세스에 의해 동시에 요청될 수 있으며, 이에 대한 접근과 사용을 적절히 관리하는 것이 필수적이다. 커널 모드에서는 이러한 자원들에 접근을 제어하고, 충돌이나 데이터 손상을 방지하는 역할을 한다. 사용자 모드에서는 이러한 공유 자원의 직접 관리를 수행하지 않는다. 이는 여러 사용자 또는 프로세스가 자원에 직접 접근할 경우 데이터의 일관성과 안정성이 위협받을 수 있기 때문입니다. 2. 운영체제에서 컨텍스트 스위칭이 발생하는 과정에서..

24.03.18 운영체제, KEYWORD, PintOS

운영체제 21. 락 프로그래머들은 소스코드의 임계영역을 락으로 둘러서 그 임계영역이 마치 하나의 원자단위 명령어인것 처럼 실행되도록 한다. 21.1 락 : 기본개념 락은 둘 중 하나의 상태를 갖는다. 첫 번째는 사용가능(available) 상태 (unblocked 또는 free) 이다. 즉, 어떤 쓰레드도 락을 소유하고 있지 않다. 두 번째는 사용 중(acquired) 상태이다. 즉, 임계영역에서 정확히 하나의 쓰레드가 락을 획득한 상태이다. lock과 unlock 루틴의 의미는 간단하다. lock() 루틴 호출을 통해 락 획득을 시도한다. 만약 어떤 쓰레드도 락을 갖고 있지 않으면 그 쓰레드는 락을 획득하여 임계영역 내로 진입한다. 이렇게 락을 획득한 쓰레드를 락 소유자(owner)라고 부른다. 만약 ..

728x90