운영체제하드웨어를 직접 핸들링하는 유일한 프로그램추상화 : 디스크 섹터 번호→ 파일, 물리 메모리 주소 → 내 주소 공간, CPU 코어 → 내 프로그램 실행중중재 : 하드웨어를 여러 프로그램이 쓰려 할 때 누가 언제 쓸지 결정 BIOSCPU는 최초에는 아무것도 모르는 상태라, 미리 정해진 주소에서 코드를 읽기 시작한다. BIOS는 부팅 가능한 디스크를 찾아서 첫 번째 섹터(512바이트)를 메모리에 복사하고 거기로 점프한다. 부트로더512바이트가 나머지를 책임짐. 핀토스의 threads/loader.S 이다. 디스크에서 커널 이미지를 찾아 메모리로 긁어오고, CPU 를 커널이 돌 수 있는 상태로 만드는 것. 모드 전환호환성 때문에 전원이 켜지면 리얼모드로 시작한다. 64비트 롱 모드까지 올라가려..
이번주 목표malloc 구현https://github.com/yeooonee/Jungle-C-MallocLab GitHub - yeooonee/Jungle-C-MallocLab: Krafton jungle week 6 Malloc LabKrafton jungle week 6 Malloc Lab. Contribute to yeooonee/Jungle-C-MallocLab development by creating an account on GitHub.github.com 이번주 한 일malloc 흐름 중 내가 구현한 것은 아래와 같다. implicit (묵시적) 으로 구현하는 것만 완료했다.mallocextend heap : 할당 부분 추가sbrk 호출 : 진짜 새 자리 받기free : 가용 블록으로 전..
implicit declaration of function 에러는 함수 원형이 미리 선언되지 않은 상태에서 함수를 호출했을 때 발생한다. 헤더 파일 미포함함수의 정의가 호출부보다 아래에 있음함수 이름 오타 함수 원형 선언 #include // 1. 위에서는 함수의 '껍데기(원형)'만 선언합니다. (세미콜론 필수!)int add(int a, int b); void printMessage();int main() { // 2. main 함수 안에서 자유롭게 호출하여 사용합니다. int result = add(5, 3); printf("결과: %d\n", result); printMessage(); return 0;}// 3. main 함수 아래에서 함수의 '내용(..
이번주 목표C 버그 유형 익히기gdb 툴 숙련도 높이기 이번주 목표 달성률은 40%인 것 같다. C 에서 심각하게 많이 나오는 오류 유형은 익히긴 했지만. gdb 툴을 충분히 활용하지 못한 것 같고, Conditional Breakpoint 도 사용하지 않았다. 문제도 절반만 풀었다. 시도한 접근 방식처음에는 gdb 쓰는 방식이 익숙하지 않아서 코드를 한 줄 씩 읽어서 어떤 코드인지 흐름을 파악했다. gdb 에 조금 익숙해진 다음에는 gdb 를 이용하여 크래시 지점을 파악하고, 코드를 읽어 문제 지점을 확인했다. 최대한 주석을 지우고 gdb 와 코드만 보고 파악하려고 노력했는데, 쉽지 않았다. 문제 지점을 읽어도 뭐가 문제인지 못 알아보는 경우도 있었다. 결국 AI 에게 어떤 데이터를 찍어봐야하는지 ..
다른 CSAPP 글 보러가기 'CS/CSAPP 컴퓨터 시스템' 카테고리의 글 목록Hello Worldskylarcoding.tistory.com 9.1 물리 및 가상주소 방식CPU가 쓰는 주소와 메모리의 실제 주소가 다를 수 있다.물리 주소 지정 : CPU가 낸 주소 = 실제 메모리 주소 (단순한 임베디드에서 사용)가상 주소 지정 : CPU가 낸 주소(가상 주소) 는 진짜 위치가 아니고, MMU(Memory Management Unit) 라는 하드웨어가 page table을 보고 실제 위치 (물리 주소) 로 바꿔준 다음에 메모리를 찾아간다. CPU: "이 주소 줘" (가상 주소) ↓MMU: "잠깐, 진짜 주소로 바꿔줄게" (page table 참조) ↓실제 메모리: 진짜 위치에서 데이터 반환..