[리눅스커널][가상파일시스템] open(): 파일 객체를 오픈할 때 세부 동작
By Guillermo Austin Kim | 2019년 3월 18일 |
open(): 파일 객체를 오픈할 때 세부 동작 유저 공간에서 open() 함수를 실행하면 커널 공간에서 다음 그림과 같은 함수 흐름을 확인할 수 있습니다. 위 그림은 유저 공간에서 함수 오픈 오퍼레이션을 실행할 때 함수 실행 흐름입니다. 유저 공간에서 open() 함수를 호출하면 시스템 콜을 발생시켜 실행 흐름이 커널 공간으로 바뀝니다. 이후 open() 함수에 해당하는 시스템 콜 핸들러 함수인 sys_open() 함수가 실행 한 후 ext4 파일시스템에서 관리하는 파일 오픈 함수인 ext4_file_open() 함수를 호출합니다. 이전 절에서 유저 공간에서 read() 혹은 write() 함수를 실행할 때도 위와 비슷한 함수 실행 흐름을 확인했습니다. 파일을 오픈할 때는 read()나 write(
[라즈베리파이] 가상 파일시스템이란?
By Guillermo Austin Kim | 2019년 1월 2일 |
가상 파일시스템이란 무엇일까요? ext4나 proc과 같은 파일시스템일까요? 가상 파일시스템은 ext4나 proc과 같은 파일시스템은 아닙니다. 리눅스 커널에서 다양한 파일시스템이 공존하며 동적으로 실행할 수 있는 가상 소프트웨어 계층입니다. 참고로, ext4는 Extended File System 4 약자로 리눅스 저널링 파일시스템입니다.라즈베리파이에서 특정 파일을 생성해서 쓰고 저장할 때 ext4 파일시스템이 해당 파일을 관리합니다. 가상 파일시스템이란 용어 자체가 리눅스 커널을 처음 접하는 분에게 혼돈을 줄 수 있으니 이 용어에 대해 조금 더 짚어 봅시다. 가상이란 용어는 객체 지향에서 말하는 추상화와 유사한 개념입니다. 추상화 계층(Abstraction Layer)은 소프트웨어를 전체 구조를 설
[리눅스커널] 워크큐: 워커 자료구조인 struct worker 구조체 알아보기
By Guillermo Austin Kim | 2019년 9월 22일 |
워커를 관리하고 저장하는 자료구조는 struct worker 구조체입니다. 이번 시간에는 struct worker 구조체 세부 필드를 분석하겠습니다. struct worker 구조체 분석하기 다음은 struct worker 구조체 선언부입니다.[https://elixir.bootlin.com/linux/v4.19.30/source/kernel/workqueue_internal.h]1 struct worker {2 union {3 struct list_head entry; 4 struct hlist_node hentry; 5 };6 struct work_struct *current_work; 7 work_func_t current_func; 8 struct pool_workqueue *current
[리눅스커널] 워크큐: 워커 스레드를 생성하는 create_worker() 함수 분석하기
By Guillermo Austin Kim | 2019년 9월 25일 |
워커 스레드를 생성하려면 create_worker() 함수를 호출해야 합니다. 이번 시간에는 create_worker() 함수 코드를 분석하면서 워커 스레드를 생성하는 과정을 배워보겠습니다. 먼저 create_worker() 함수가 하는 주요 동작은 다음과 같습니다. 워커풀 아이디 읽어오기 워커 스레드 이름을 지정해 워커 스레드 생성 요청하기 워커풀에 워커 스레드 등록하기 워커 정보를 갱신하고 만든 워커 스레드를 깨우기 각 단계 별 코드를 자세히 살펴보겠습니다. 다음은 create_worker() 함수 구현부입니다.1 static struct worker *create_worker(struct worker_pool *pool)2 {3 struct worker *worker = NULL;4 int