하이퍼바이저하이퍼바이저의 구조를 이해하기 위해서 ELx의 개념을 알고있어야한다.EL2에서 하이퍼바이저가 실행, EL1에서 리눅스 커널이 실행EL1에서 HVC를 실행하면 EL2 진입트러스트 존익셉션 레벨의 개념 위에 트러스트 존이 구성됨트러스트 존에 진입하기 위해서 EL
X0 ~X30이 범용 레지스터PC : 프로그램 카운터SP : 스택 포인터SPSR : pstate값이 이곳에 업데이트ELR : 익셉션 링크 레지스터EL2 : 하이퍼바이저, EL3 : 트러스트존 EL3 모니터익셉션 레벨 0 에서 1으로 스위칭인터럽트시 0에서 1로, 인터럽
Arm에서 제공하는 시큐리티 기능이자 소프트웨어 아키텍쳐대부분 Arm 프로세서에 적용되는 기술(휴대폰100%)CPU 내부에 보안 관점으로 소프트웨어 및 하드웨어적으로 신뢰할 수 있는 실행 영역을 제공하자.ex) 인터넷뱅킹 어플 실행시1) 커널에서 SMC 명령 실행2)
태스크 프로세스 프로세스와 관련된 자료 구조 태스크 디스크립터(task descriptor)라고 부르고 task_struct 구조체로 표현 thread_info 구조체와 thread 구조체로 표현 자료 구조의 특징 task_struct: 일반적인 프로세스의 속성(아
CPU 아키텍처에서 인터럽트를 처리하는 방식을 활용arch/arm64/kernel/entry-common.carch/arm64/kernel/entry.S인터럽트는 익셉션(Exception)의 한 종류로 처리외부 하드웨어 입력이나 오류 이벤트가 발생하면 익셉션 모드로진입
인터럽트가 발생한 후 빨리 처리해야 하는 루틴인터럽트 핸들러에서는 간결한 연산 수행 권장인터럽트 핸들러의 실행 시각 측정 요망지연해도 되는 인터럽트의 인터럽트 처리Top Half 부분의 인터럽트 핸들러는 최소한의 일을 수행하고 약간 지연되어 처리되어도 상관 없는 부분은
타임 아웃커널 타이머최적의 시나리오에서 실행일반적으로 디바이스 드라이버를 개발할 때 구현 점검예시버스를 기다린 후 버스에 탑승예외 사항복잡도가 있는 루틴시간이 오래 걸리는 루틴!예시버스를 타려고 했는데 버스에 승객이 가득차 있다?각종 예외 상황 (엘리베이터, 메일 기다
현재 시점으로 미래의 시점(jiffies)에 동적 타이머가 만료동적 타이머가 만료될 때 동적 타이머 핸들러 함수 호출디바이스 드라이버에서 동적 타이머는 많이 사용됨디버깅 정보 출력, 특정 시간 후에 루틴을 실행동적 타이머 초기화timer_setup()동적 타이머 등록a
다수의 프로세스를 잘 관리하기 위해간단한 베어메탈 시스템에서는 상세한 프로세스의 상태 정보가 필요하지 않음TASK_INTERRUPTIBLE 0x0001 // 프로세스가 슬립에 진행할 때TASK_UNINTERRUPTIBLE 0x0002 // 슬립이 깨어날 조건을 명시TA
실행 중인 프로세스를 Arm 코어에서 빼내 우선순위가 높은 프로세스를Arm 코어에서 실행Race가 발생하는 주요 요인 중 하나시스템 응답성을 키울 수 있는 기능CONFIG_PREEMPTION프로세스가 schedule() 함수를 호출해 자발적으로 스케줄링 요청msleep
preempt_disable()/preempt_enable() 함수특정 루틴에서 Preemption이 유발되면 오동작할 때하드웨어 디바이스에 정확한 딜레이를 인가해야 하는 경우코드 구간의 실행 시간을 정확히 지켜야 하는 경우preempt_disable() 함수를 호출한
컨텍스트는 레지스터 세트이다레지스터 세트를 스위칭하는 것이 컨텍스트 스위칭이다.태스크 스케줄링의 아키텍처 관점의 동작CPU 아키텍처 마다 구현 방식이 다름어셈블리 명령어로 구현Armv8 아키텍처 기반 리눅스 커널vruntime이라는 가상실행시간으로 프로세스의 우선순위
런큐는 실행 대기 상태인 프로세스(TASK_RUNNING)와 CPU 코어에서 실행 중인 current 프로세스를 관리하는 스케줄링의 핵심 자료구조프로세스가 CPU에서 실행되려면 먼저 런큐에 삽입됨스케줄러는 런큐에 삽입된 프로세스 중에서 우선순위(vruntime)를 계산
어떤 함수나 특정 코드 구간을 실행할 때 1개의 프로세스만 접근정해진 순서로 코드를 실행==> 다음과 같이 동작하도록 코드를 설계하거나 유지보수하는 기법2개이상의 프로세스가 동시에 실행하면 동시 접근문제를 일으킬 수 있는 코드 블록2개 이상의 프로세스가 동시에 어떤 코
뮤텍스 비해 구현 복잡도가 낮음스핀락 구현부는 아키텍처에 의존적으로 CPU 아키텍처(Armv7, Armv8)에 따라 스핀락 구현부가 다름접근 단위 : cpu 코어이미 누군가가 스핀락을 획득했으면 스핀락을 획득할 때까지 계속 기다림다른 프로세스가 스핀락을 해제하면 바로
뮤텍스는 상호 배제(mutual exclusion)의 약자로서 Critical Section에 한 개의 프로세스만 접근하는 동기화 기법뮤텍스는 운영체제에서 쓰는 용어로 ‘Critical Section에 2개의 프로세스가 동시에 접근하지 못하도록 방지하는 기법’각 운영체
스핀락 이슈 발생시 이 컨피그를 키기스핀락을 획득한 상태에서 슬립 진입을 시도하면 다양한 디버깅 메시지 출력Atomic 코드 구간에서 슬립 진입을 시도하면 다양한 디버깅 메시지 출력뮤텍스 semantics 오류 검출fastpath 루틴은 사용할 수 없으며 항상 slow
유저모드에서 커널모드로 진입하는 동작유저모드와 커널모드 사이의 가상 계층이자 인터페이스커널 코드가 실행될 때는 커널 내부의 모든 함수 호출이 가능제약 없이 메모리 공간에 접근해서 하드웨어를 제어유저 애플리케이션 코드가 구동하는 동작과 상태유저 애플리케이션은 유저공간에서
파일을 어떤 방식으로 관리하는지 파악하는 것은 매우 중요모든 객체를 파일로 관리파티션 테이블 작성(LUNn) 및 파티션 추가fstab을 수정해 로지컬 파티션 설정커널 부팅 과정에서 파티션 마운트 확인fs-verity슈퍼 블록아이노드디엔트리파일 객체커널에서 다양한 파일
htop , ps -ely로 확인 가능pid : 1934 (ppid : 1687)1687 bash 에서 1934 라즈비안 테스트 파일이 fork되었다.2515 bash는 putty에서의 bash 이며copy되어 생성되었음을 확인할 수 있다.2751은 1687의 chil
name : IPI시간 : 6060.470869IPI가 무엇인지 궁금해서 찾아보았다. IPI : Inter-Processor Interrupt른 프로세서 또는 코어로부터 발생하는 인터럽트입니다. 이는 다중 프로세서 시스템에서 프로세서 간 통신 및 동기화를 위해 사용 =