커널

포스트: 228|조회수: 0|CIVILIZATION
Items

Posts

228 posts
[라즈베리파이] 가상 파일시스템이란?

[라즈베리파이] 가상 파일시스템이란?

Guillermo Austin Kim|2019년 1월 2일

가상 파일시스템이란 무엇일까요? ext4나 proc과 같은 파일시스템일까요? 가상 파일시스템은 ext4나 proc과 같은 파일시스템은 아닙니다. 리눅스 커널에서 다양한 파일시스템이 공존하며 동적으로 실행할 수 있는 가상 소프트웨어 계층입니다. 참고로, ext4는 Extended File System 4 약자로 리눅스 저널링 파일시스템입니다.라즈베리파이에서 특정 파일을 생성해서 쓰고 저장할 때 ext4 파일시스템이 해당 파일을 관리합니다. 가상 파일시스템이란 용어 자체가 리눅스 커널을 처음 접하는 분에게 혼돈을 줄 수 있으니 이 용어에 대해 조금 더 짚어 봅시다. 가상이란 용어는 객체 지향에서 말하는 추상화와 유사한 개념입니다. 추상화 계층(Abstraction Layer)은 소프트웨어를 전체 구조를 설

[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock_irq() 소개

Guillermo Austin Kim|2018년 12월 30일

이해를 돕기 위해 다시 화장실을 예를 들겠습니다. 어떤 영업 사원이 있다고 가정하겠습니다. 영업 사원은 언제 전화를 받는 것이 회사 규칙입니다. 그런데 이 영업 사원은 화장실에 들어갈 때 전화를 안 받아도 된다고 회사와 약속을 했습니다. 화장실에서 중요한 용무를 봐야 하기 때문입니다. 그 조건으로 화장실 문에 들어갈 때는 비행기 모드로 바꾸고 화장실에서 나올 때는 반드시 비행기 모드를 풀어야 합니다. 여기서 전화를 인터럽트 그리고 화장실 문에 들어간 상태를 임계 영역이라고 바꿔서 생각해봅시다. 이 영업 사원은 화장실에서 용무를 볼 때 전화가 오지 않으니 방해을 안 받습니다. 스핀락을 얻어 임계 영역을 실행 중에 인터럽트를 실행을 막는 상태입니다. 임계영역이 다음과 같은 코드 흐름일 때 임계 영역에서

[라즈베리파이] 동기화 - 스핀락(spinlock): 두 번째 스핀락 해제 시 동작(2)

Guillermo Austin Kim|2018년 12월 30일

스핀락을 해제할 때 spin_unlock() 함수를 호출하며 이 때 스핀락 인스턴스 owner 값을 +1만큼 증감한다고 배웠습니다. 이제 [2] 번 프로세스가 임계 영역 실행을 마치고 스핀락을 해제했습니다. spin_unlock() 함수를 실행하니 스핀락 인스턴스 중 owner를 +1만큼 증감해서 0x3이 됐습니다. [3]번 프로세스는 스핀락 인스턴스를 계속 읽으면서 스핀락 인스턴스 owner 값이 0x3이 되기를 기다리고 있었습니다. 그런데 스핀락 인스턴스 owner 값이 0x3이니 스핀락을 획득하고 무한 루프를 빠져나갑니다. 스핀락 기본 동작과 함께 누군가 스핀락을 획득했을 때 스핀락 동작에 대해서 알아봤습니다. 코드 분석으로 다음과 같은 중요 포인트를 알 수 있습니다.1.스핀락은 코드 구현도가

[라즈베리파이] 동기화 - 스핀락(spinlock): 첫 번째 스핀락 해제 시 동작(1)

Guillermo Austin Kim|2018년 12월 26일

스핀락을 해제할 때는 spin_unlock() 함수를 호출하는데 스핀락 인스턴스의 owner를 +1만큼 증감한다고 알고 있습니다.static inline void arch_spin_unlock(arch_spinlock_t *lock){smp_mb();lock->tickets.owner++;dsb_sev();}spin_unlock() 함수를 호출하면 여러 인라인 형태 함수로 연결되는데 실제 동작은 arch_spin_unlock() 함수가 수행합니다. [1] 번 프로세스가 스핀락을 해제할 때 스핀락 인스턴스인 owner를 +1증감합니다. [2] 프로세스는 Busy-waiting 동작으로 스핀락 인스턴스의 owner가 0x2가 될 때까지 무한루프를 돌고 있는 상태였습니다. 그런데 [2]번 프