본문 바로가기

All154

[나는 리뷰어다] 전문가를 위한 C 이 글은 한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다. 개요 나는 처음 프로그래밍을 배울 때 나중에 어떤 언어를 배우든 C언어가 가장 기초가 된다는 이야기를 많이 들었던 것 같다. 물론 새로운 언어는 계속 생겨나고있고 첫 번째 언어에 정답이 있다고 생각하지는 않는다. 다만 나는 C언어가 프로그래밍 언어의 발전의 중심에 있었으며, 다른 언어에 비해 하드웨어, 운영체제와 가까운 만큼 배울 점이 많은 언어라고 생각한다. 그리고 C언어는 만들어진지 이제 50년이 되었지만 아직도 많은 프로젝트에서 사용된다. "전문가를 위한 C"라는 제목처럼 이 책은 초심자를 위한 책은 아니다. 처음 C 언어를 배운다면 쉬우면서 사람들이 많이 읽은 책을 읽고, 그 다음 더 깊이있는 책을 읽어야 한다고 생각한다. 이 책.. 2022. 10. 30.
compound page 정리 struct page 메모 struct page에 대한 간단한 노트 참고로 64비트 리눅스는 LP64를 사용한다. 이 글에서 자료형의 크기는 LP64에 따라서 서술되었다. Introuction struct page는 페이지 프레임 하나 (보통 4096 바이트)에 대한 정 hyeyoo.com 앞선 글에서는 struct page가 어떻게 생겼는지 간단하게 살펴봤다. compound page에서는 이 자료구조가 어떻게 처리되는지 알아보자. What is compound page 일반적인 non-compound page (order == 0)와는 달리 compound page는 2^n개의 페이지 프레임을 하나의 페이지로 취급한 것이다. 아래 사진은 order-2 compound page를 그림으로 나타내 보았다.. 2022. 10. 5.
[나는 리뷰어다] 동시성 프로그래밍 이 글은 한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다. 동시성 프로그래밍 Rust 언어를 중심으로 어셈블리어, C 언어를 사용해 CPU 아토믹 처리, 소프트웨어 트랜잭셔널 메모리, async/await 등 동시성 프로그래밍과 관련된 이론적 배경부터 구현까지 설계자 입장에서 살펴본 hanbit.co.kr 개요 2000년대에 들어서면서 그 유명한 무어의 법칙이 깨지고 프로세서의 clock rate 향상에 한계가 생기면서 multi-core/many-core 프로세서가 트렌드로 접어든지 오래이다. 프로세서가 하나라고 가정하고 짠 프로그램은 더 많아진 프로세서를 제대로 활용하지 못하기 때문에, 이제는 많은 개발자들이 병렬 프로그래밍에 대해서 잘 알아야한다. 이 책은 동시성 프로그래밍의 개념을 전체적.. 2022. 10. 2.
struct page 메모 struct page에 대한 간단한 노트 참고로 64비트 리눅스는 LP64를 사용한다. 이 글에서 자료형의 크기는 LP64에 따라서 서술되었다. Introuction struct page는 페이지 프레임 하나 (보통 4096 바이트)에 대한 정보를 나타내며 64비트 환경에서 일반적으로 64 바이트이다. struct page는 부팅 과정에서 동적으로 할당된다. 부팅이 끝나면 64/4096 = 1.56%의 메모리가 struct page에 사용된다. memory model & struct page page frame number conversion 물리 메모리는 페이지 프레임들의 집합이기 때문에 struct page는 배열의 형태로 관리하는데,어떤 물리 메모리 모델(FLATMEM, SPARSEMEM)를 [1].. 2022. 9. 14.
메모리 일관성 모델 (Memory Consistency Model) 이 글에서는 메모리 일관성 모델이 무엇이며, 컴퓨터 구조에서 store buffer와 invalidate queue가 어떤 역할을 하고, 메모리 접근 연산의 일관성을 어떻게 유지할 수 있는지 알아본다. 메모리 배리어도 자세하게 정리하려고 했으나 글 하나에 담기엔 너무 길어져서 따로 정리해야겠다. 용어 정리 글을 쓰다보니 용어 하나 하나의 의미를 구분하는 게 생각보다 중요했다. 용어를 헷갈리기 시작하면 내용 전체가 헷갈린다. 그러니 용어를 먼저 정리해보자. program order, execution order, perceived order [1]에서는 메모리 연산이 코드에 명시된 순서를 program order, 메모리를 참조 명령어들이 실행되는 순서를 execution order, 메모리 연산의 결과가.. 2022. 8. 4.
Virtual Memory: vmalloc(), vm_map_ram() 분석 vmalloc(), vfree()란 커널에는 메모리를 할당하는 다양한 방법이 있다. 페이지 할당자는 물리적으로 연속적인 페이지 프레임을 할당하며, 슬랩 할당자는 order-n 페이지 하나를 같은 크기로 쪼개서 슬랩 객체를 할당한다. 페이지 할당자와 슬랩 모두 물리적으로 연속적인 메모리를 할당한다. 다만 물리 주소로 접근하지는 않고, direct map 영역의 주소를 사용하여 접근한다. 하지만 항상 물리적으로 연속적인 메모리를 할당할 수는 없는데, 할당하려는 메모리의 크기가 클 수록, 메모리가 단편화될 수록 물리적으로 연속적인 메모리를 할당하기가 어려워진다. vmalloc()은 물리적으로 연속적인 메모리를 할당하는 대신, 물리적으로 흩어진 메모리들을 가상 주소 상으로 연속적이도록 페이지 테이블을 초기화한다.. 2022. 7. 13.