PREEMPT_COUNT
Posts
4 posts[리눅스커널] thread_info 구조체의 preempt_count - 인터럽트 컨텍스트 실행 저장
리눅스 시스템에서 인터럽트는 언제든지 발생할 수 있습니다. 인터럽트가 발생하면 프로세스 실행을 멈추고 인터럽트에 해당하는 인터럽트 핸들러를 실행합니다. 커널에서는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하는 동작을 인터럽트 컨텍스트라고 부릅니다. ---참고로 인터럽트는 외부 입출력 장치에 어떤 변화가 있을 때 발생하는 전기 신호 혹은 이를 CPU에게 알려서 처리하는 과정을 뜻합니다. 리눅스 커널은 인터럽트를 처리할 수 있는 함수를 지원하며, 자세한 내용은 5장의 5.1절에서 설명합니다.--- thread_info 구조체의 preempt_count 필드에 인터럽트가 실행 중인 상태를 나타내는 비트를 설정합니다. 이 비트를 읽어 인터럽트 컨텍스트 유무를 식별합니다. 리눅스 커널에서는 현재 실행 중
4.9 프로세스 컨택스트 정보는 어떻게 저장할까?
리눅스 커널에서는 프로세스 실행 흐름은 컨택스트란 용어로 표현합니다. 컨택스트 종류는 다음과 같습니다. 1. 프로세스 컨택스트: 프로세스가 스케줄링 될 수 있는 상태 2. 인터럽트 컨택스트: 인터럽트가 발생한 후 인터럽트 핸들링을 위한 동작 중 3. Soft IRQ 컨택스트: Soft IRQ 서비스를 실행 중이며 Soft IRQ 서브루틴(하부 함수 흐름) 동작 중 컨택스트 정보는 struct thread_info 구조체 preempt_count 멤버에서 확인할 수 있습니다. 커널은 이 값을 읽어서 컨택스트 종류를 식별합니다. 커널에서는 어떻게 프로세스가 어떤 컨택스트에서 실행하는지 파악할까요?in_interrupt()와 in_softirq() 매크로 함수를 통해 확인할 수 있습니다. 해당 코
4.8 스레드 정보(struct thread_info)
프로세스 상세 정보를 저장하는 자료구조는 태스크 디스크립터입니다. 이와 더불러 프로세스 세부 실행 정보를 저장하는 struct thread_info 자료구조가 있습니다. 커널이 프로세스를 생성할 때 프로세스마다 고유한 스택 공간을 부여합니다. 스택 최상단 주소에 struct thread_info 구조체 필드가 저장돼 있습니다. 이 구조체 필드는 커널이 프로세스를 제어할 때 필요한 중요 정보를 담고 있습니다.+ 프로세스 컨택스트 정보+ 선점 스케줄링 여부+ 컨택스트 스위칭 시 저장한 레지스터 세트 이번 절에서는 프로세스 동작을 표현하는 struct thread_info 구조체에 대해서 알아봅시다. struct thread_info 구조체 각 멤버에 대해 알아보기 전에 이 구조체가 프로세스 어느 주소에 위
ARM64 - 프로세스(Process) preempt_disable(), preemption 스케줄(Schedule) 조건 분석
아래 제 블로그에서 ARM32 아키텍처에서 preempt_disable() 매크로 함수를 호출하면 __irq_svc 벡터에서 svc_preempt 함수를호출하지 않아, preemption이 수행되지 않는다고 확인했어요.http://rousalome.egloos.com/9964816 이번에는 ARM64(Aarch64) 아키텍처에서는 어떤 코드로 구현 되는지 살펴 볼께요. ARM64(Aarch64) 아키텍처는 ARM32 아키텍처와는 다르게 아예 어떤 코드가 실행이 되던 current_thread_info을 읽어올 수 있는 Instruction을 제공해요.코드는 아래와 같은데, "mrs" 명령어로 스택 Top 주소를 가져오네요. current_thread_info()가 호출될 때 속도를 더 빠르게 하기 위




