# Linux kernel

Linux Kernel OS 2(작성중)
태스크가 kernel에 의해 운영 되면서 여러 상태로 전이를 한다(ready, running, dead ...)이는 태스크가 요청했던 자원이 사용 가능해지면 다시 수행시켜 줌으로써 보다 높은 시스템 활용률을 제공하려 한다일단 태스크가 생성되면 그 태스크는 준비 상태TA

1. Linux Kernel Terms
Kernel은 OS의 구성 요소 중 하나로, 상위 수준 소프트웨어에게 하위 수준 서비스를 위한 인터페이스를 제공한다. 즉, 프로세스 수행을 지원하며 하드웨어 자원을 관리한다.

LWP, Copy-on-Write
PCB는 담긴 meta data들이 많기 때문에 메모리에서 큰 용량을 차지할 수 있다.따라서 Parent 에서 Child를 fork() 하는 과정에서 PCB가 복사되고 이때 많은 오버헤드가 발생하는데 이를 줄이기 위해서 PCB 구조체 전체를 복사하는 것이 아닌 포인터를

Context Switch ( 문맥교환 )
문맥교환이라고도 한다.CPU를 사용하는 프로세스가 변경될 때 발생하는 CPU 교환 작업이라고 생각하면 될 것 같다.Context Switch가 발생할때 수행되는 커널의 함수SystemCall 과는 다르게 외부에서 호출할 수 없으며 커널 내에서만 호출이 가능하다.이때 s
prepare_kernel_cred(), commit_creds()
Task 리눅스에서 task는 프로그램의 실행 단위를 나타낸다. 커널에서 프로세스, 쓰레드를 모두 task로 본다. PCB, TCB도 다 task_struct로 구현되어 있다고 한다. 각 task는 커널 메모리에 task_struct 구조체로 표현된다. task_str

Linux Kernel module programming
Kernel module? 모듈은 사용자의 혹은 커널의 요구로 읽혀지거나 아니면 없어지는 코드들로 이루어진 프로그램의 어떤 한 조각을 의미한다. 커널은 하나의 큰 모듈들의 집합이라고 볼 수 있다. 모듈들을 통해서 필요할때 더 추가, 혹은 제거를 통해서 커널을 다시 컴파

컨테이너를 위한 리눅스 기능: cgroup, namespace, union mount
컨테이너 기술의 근간이 되는 Cgroup, Namespace, Union mount에 대해 알아보자.
[Linux] Aarch64 Busybox 크로스 컴파일 방법
QEMU에서 브레이크 안걸고 리눅스 커널을 실행하면 rootfs가 없다고 나온다.여러 가지 방법으로 rootfs를 만들 수 있는데, 그 중 가장 간단한 busybox를 이용한 방법을 정리하였다.Busybox를 Git에서 내려받는다.빌드할 Busybox의 버전을 정해야

리눅스 커널(kernel)
컴퓨터는 크게 하드웨어와 소프트웨어로 나뉜다.하드웨어는 눈에 보이고 , 손으로 만질 수 있는 것들 예를 들면 모니터 , 데스크톱, CPU 등이 될 수 있다.소프트웨어는 하드웨어와 반대로 눈에 보이지 않고 손으로 만질 수 없는 것들 , 예를 들면 현재 우리가 이 블로그를

[Linux] Aarch64 리눅스 커널 크로스 컴파일 방법 (using LLVM)
LLVM을 통해 리눅스 커널을 빌드할 수 있도록 만드는 중이라고 한다.아래 링크에 보면 arm64는 이미 (2022.09.11 기준) LLVM을 이용해 빌드가 가능하다고 한다.https://docs.kernel.org/kbuild/llvm.html대체로 아래에