본문 바로가기

코딩

크래프톤 정글 week09, day71 - Journaling(저널링), Protection(보호) & Isolation(격리), 시스템 콜 순항 중 Journaling(저널링) 파일 시스템이나 데이터베이스에서 데이터의 변경 사항을 안전하게 관리하기 위해 사용하는 Crash Consistent에 대한 기술 중 하나 이 접근 방식에서는 데이터를 실제로 수정하기 전에, 모든 변경 사항을 ‘저널’이라고 하는 별도의 공간에 기록하며, 이 정보를 이용해 시스템이 충돌한 후에도 데이터를 안전하게 복구할 수 있다. 저널링의 주요 구성 요소 저널(Journal) 변경 사항이나 트랜잭션의 로그가 기록되는 공간 데이터를 수정하기 전에 예비 기록을 하는 곳으로, 시스템 충돌 시 복구의 근거가 된다. 메타데이터(Metadata) 파일의 이름, 크기, 위치 등 파일에 대한 정보를 수정할 때, 이 메타데이터 변경 사항도 저널에 기록된다. 데이터(Data) 사용자 또는 응용 프.. 더보기
Pintos-kaist Guide - INTRODUCTION Introduction KAIST CS330의 핀토스 프로젝트에 오신 것을 환영합니다. 이번 학기에는 카이스트 CS330 과목에 적합하도록 특별히 수정된 핀토스 버전을 사용할 예정입니다. 이 수정된 버전은 기존의 핀토스와 일부 요구 사항이 다르기 때문에, 본 설명서의 지침을 우선적으로 따라야 합니다. 이전 핀토스 프로젝트를 참고할 수는 있지만, 업데이트된 프로젝트의 요구 사항에 맞춰 일부 기능을 재구현해야 할 수도 있습니다. 변경 사항으로 인해 교수님이 설명서를 업데이트해야 했습니다. 교수님이 수정된 버전과 설명서를 최대한 일치시키려 노력했지만, 동기화되지 않은 부분이 있을 수 있습니다. 이런 부분을 발견하시면 교수님께 바로 알려주시기 바랍니다. 또한, 법적 및 윤리적 문제에 대한 섹션은 반드시 확인하셔.. 더보기
크래프톤 정글 week09, day70 - fsync(), Crash Consistent, 시스템 콜 구현 에러 해결 fsync() 프로그램이 파일 시스템에 데이터를 안전하게 저장하도록 보장하는 데 사용되는 시스템 호출 중 하나이다. 이 함수는 특정 파일의 변경 사항이 디스크에 완전히 쓰여지도록 하여, 시스템 충돌이나 전원 문제 등 예기치 않은 상황에서도 데이터의 손실을 방지하는데 중요한 역할을 한다. fsync()의 작동 원리 호출과 실행 프로그램이 fsync() 함수를 호출하면, 해당 함수는 인자로 받은 파일 디스크립터가 가리키는 파일에 대한 모든 미완성 I/O 작업(입력/출력 작업)을 완료시킨다. 데이터 및 메타 데이터의 동기화 fsync()는 파일의 데이터 뿐만 아니라 메타 데이터(예 : 파일의 수정시간)까지 디스크에 쓰도록 보장한다. 이는 파일 시스템의 일관성을 유지하는 데 중요하다. 성공 및 실패 작업이 성공.. 더보기
크래프톤 정글 week09, day69 - VFS Layer, Generic Block Layer, 시스템 콜 무한 에러 중 VFS layer 운영체제에서 다양한 파일 시스템을 추상화하여 통합적으로 관리할 수 있게 해주는 중요한 컴포넌트 이를 통해 사용자와 응용 프로그램은 파일 시스템의 구체적인 구현 방식을 신경 쓰지 않고도 파일 작업을 수행할 수 있다. VFS의 주요 기능과 특징 추상화(Abstaction) VFS는 다양한 실제 파일 시스템을 하나의 일관된 인터페이스로 추상화함으로써, 사용자가 파일 시스템의 구체적인 세부 사항을 몰라도 파일에 접근할 수 있게 한다. 호환성(Compatibility) 다양한 파일 시스템(NTFS, FAT)에 대해 동일한 API를 제공함으로써, 다양한 환경에서의 호환성을 보장한다. 이는 개발자가 다양한 파일 시스템을 지원하는 응용 프로그램을 쉽게 개발할 수 있게 한다. 포팅성(Portabilit.. 더보기
크래프톤 정글 week09, day68 - 시스템 콜 구현 막혀있는 중 오늘은 하루종일 시스템 콜 함수에 붙잡혀 있느라 TIL을 쓸 수 있는게 없다. 간단하게 회고 해보자면 argument passing이 완료되고, 다음 테스트인 시스템 콜을 구현해야 한다. 그래서 syscall.c에서 함수를 구현 중인데 시스템을 power_off() 함수를 호출해 핀토스를 강제 종료 시키는 halt()라는 함수가 있다. 근데 이건 함수 안에 power_off() 함수만 넣으면 되는거라 분명 되야 하는데, 계속 "missing 'begin' message"라고 뜬다. 계속 구글링을 해보는데 나오는건 process_wait에서 프로세스를 기다리는 시간이 필요하기 때문에 공백 for문으로 1억같은 충분한 대기 시간을 주었어야 했다. 라고 나오지만 우리는 이미 작성이 되어있는 상태였기 때문에 이.. 더보기
크래프톤 정글 week09, day67 - 시스템 콜 함수 간단정리 System Call(시스템 콜) 어플리케이션 혹은 사용자 프로그램이 운영체제의 핵심 기능을 사용하기 위해 커널에 요청을 보내는 인터페이스 즉, 사용자 모드에서 실행되는 프로그램이 시스템의 하드웨어 자원이나, 운영체제가 제공하는 낮은 수준의 서비스를 이용하고자 할 때 사용된다. 시스템 콜의 필요성 컴퓨터 시스템은 보안과 안정성을 위해 유저 모드(User Mode)와 커널 모드(Kernel Mode) 두 가지 실행 모드를 구분한다. 유저 모드에서 실행되는 프로그램은 직접 하드웨어를 제어할 수 없으며, 이러한 제한은 시스템이 보안을 유지하고, 잘못된 프로그램이 시스템에 해를 끼치는 것을 방지하기 위함 따라서 하드웨어 자원에 접근하거나 운영체제의 특정 기능을 이용하고자 할 때는 시스템 콜을 통해 커널에 요청을.. 더보기
크래프톤 정글 week08, day66 - userprog 뜯기 계속 쉬운것만 잔디를 심다보니 최근에는 올리지 않는게 더 나을 것 같아 pintos가 끝날 동안엔 잔디심기를 안 올릴 것 같다. %rdi 주로 첫 번째 인자 전달에 사용되며, 문자열이나 배열 같은 데이터의 목적지 주소를 지정하는데 사용된다. %rsi 두 번째 인자 전달에 사용되며, 문자열이나 배열같은 데이터의 원본 주소를 지정하는데 사용된다. %rdx 세 번째 인자 전달에 사용되며, 입출력 관련 시스템 호출에서 파일 디스크립터나 버퍼의 크기 등을 전달하는데에도 활용된다. %rcx 네 번째 인자 전달에 사용되며, 반복(loop) 카운트를 관리하는데에 사용될 수 있다. 또한 몇 명령어에서는 반복 횟수를 지정하는데 사용된다. %r8 다섯 번째 인자 전달에 사용되며, x86-64 아키텍쳐에서 새롭게 추가된 레지.. 더보기
크래프톤 정글 week08, day65 - Atomic Operation, Rax Register, Cache Atomic Operation(아토믹 오퍼레이션) 한 번에 완전히 수행되며, 중간에 다른 스레드나 프로세스에 의해 방해 받지 않는 연산을 말한다. 아토믹 오퍼레이션은 멀티스레딩 환경에서 공유 자원에 대한 접근을 동기화할 때 중요한 역할을 한다. 중요성 멀티스레딩 환경에서 여러 스레드가 동시에 같은 데이터에 접근하려 할 때, 데이터의 일관성과 무결성을 유지하기 위해 동기화 메커니즘이 필요하다. 아토믹 오퍼레이션은 이러한 동기화를 보장하는 가장 기본적인 단위이며, 아토믹 오퍼레이션이 아닌 경우, 한 스레드가 작업을 수행하는 도중 다른 스레드가 개입할 수 있기 때문에 예상치 못한 결과를 초래할 수 있다. 예시 변수의 증가 및 감소 i++나 i— 같은 연산은 간단해 보이지만, 실제론 읽기, 수정, 쓰기 세 단계.. 더보기