KERNEL

포스트: 183|조회수: 0|PERSON
Items

Posts

183 posts

[리눅스커널] 메모리 관리: 가상 메모리 기법의 주요 개념 소개

Guillermo Austin Kim|2019년 6월 1일

가상 메모리의 주요 개념 소개 가상 메모리의 주요 개념을 다음 그림을 보면서 배워 보겠습니다. [그림 1] 가상주소와 물리주소 및 페이지와의 관계 위 그림과 함께 가상 주소를 물리 주소로 변환하는 실행 흐름을 배워봅시다. 가장 왼쪽에 보이는 주소 맵이 가상 메모리입니다. 가장 윗 부분에 0x0000_0000 주소가 있는데 아랫 방향으로 주소가 커집니다. 가장 아랫 부분은 0FFF0_0000 주소입니다. 즉, 가상 주소 범위는 0x0~0xFFFF_FFFF 이며 전체 크기는 4GB입니다. CPU에서 구동 중인 프로세스가 보는 주소는 가상 주소입니다. 우리가 분석한 모든 커널 함수는 이 가상 물리 메모리 공간에서 실행하는 것입니다. 가상 메모리 박스 오른쪽 화살표를 눈으로 따라가면 주소 변

[리눅스커널][가상파일시스템] 수퍼블록: 슈퍼블록 정보를 statfs 시스템 콜로 읽는 과정 살펴보기

Guillermo Austin Kim|2019년 5월 8일

슈퍼블록 각 멤버들은 파일시스템에 대한 메타 정보를 저장합니다.유저 공간에서 파일시스템 정보를 알려면 어떤 함수를 호출해야 할까요? 유저 공간에서 statfs() 함수를 호출하면 커널 공간에서 해당 시스템 콜 핸들러 함수인 sys_statfs() 함수를 실행합니다. 예제 코드는 다음과 같습니다.1 #define FILENAME_NAME "/home/pi"2 #define BUFF_SIZE 2563 int main() 4 {5 struct statfs file_sys_info;6 char fname[BUFF_SIZE] = {0,};78 strcpy(fname, FILENAME_NAME);9 12 if(statfs(fname, &file_sys_info)) {13 printf("Unable to s

[리눅스커널][인터럽트] 인터럽트 디스크립터: 인터럽트 발생 횟수 확인하기

[리눅스커널][인터럽트] 인터럽트 디스크립터: 인터럽트 발생 횟수 확인하기

Guillermo Austin Kim|2019년 4월 12일

5.5.2 인터럽트 발생 횟수는 어떻게 저장할까? 대부분 디바이스 드라이버는 인터럽트 핸들러로 하드웨어 디바이스와 통신합니다. 예를 들면 터치 디바이스에서 사용자가 터치를 입력하면 터치 디바이스에서 올려주는 인터럽트로 터치 입력이 발생했다고 알려줍니다. 디바이스 드라이버에서 인터럽트 핸들러를 등록한 후 해당 디바이스가 제대로 인터럽트를 발생시키는지 어떻게 알 수 있을까요? 이럴 때는 인터럽트 발생 횟수를 점검하면 됩니다. 이번에는 인터럽트 발생 횟수를 인터럽트 디스크립터가 어떤 방식으로 관리하는지 살펴보겠습니다. 인터럽트 발생 횟수는 인터럽트 디스크립터 내 struct irq_desc 구조체 kstat_irqs 필드에 저장합니다. 이 변수는 per-cpu 타입입니다 [https://elixir.b

[리눅스커널][가상파일시스템] 파일 객체: lseek() 함수 연산 세부 동작 분석

Guillermo Austin Kim|2019년 3월 27일

파일 객체: lseek() 함수 연산 세부 동작 분석 유저 공간에서 lseek() 함수를 호출하면 파일 쓰기 포인터 위치를 조절할 수 있습니다. 다음 예제 코드를 보면서 lseek() 함수 동작에 대해 살펴보겠습니다. 1 #include 2 #include 3 #include 45 #define FILENAME_NAME "/home/pi/sample_text.text"67 int main() 8 { 9 int fd = 0;10 ssize_t read_buf_size;11 off_t new_file_pos; 12 13 fd = open(FILENAME_NAME, O_RDWR);14 new_file_pos = l