아무것도 몰라요

리눅스 13

[linux kernel] CFS Scheduler에서 VR(T) 조정(wake_up)

1. 도입 Linux kernel이 사용하는 scheduler는 점점 발전해왔다. 초기에는 매우 단순한 scheduler를 사용하다가 Linux 2.4부터는 O(n) scheduler를 사용했고, linux 2.6~linux 2.6.22에는 O(n) scheduler를 조금 더 보완한 O(1) scheduler를 사용하였다. 이후 linux 2.6.23에 현재까지도 사용하고 있는 cfs scheduler가 처음 도입되었다. linux kernel은 여러 계층의 scheduler를 제공하지만 대부분의 경우 CFS(SCHED_NORMAL, SCHED_BATCH)를 사용한다. 오늘은 CFS scheduler의 특정 현상에 대해 공부하기 위해 글을 쓰게 되었다. 들어가기 앞서서 O(n)과 O(1) schedul..

리눅스 2021.02.19

리눅스 커널에 System Call 추가하기

0. 도입 System Call이란 OS에서 제공된 programming interface이다. User가 함부로 I/O와 같은 Privileged 한 instruction을 수행할 수 없게 하기 위한 보호 장치라고 할 수 있다. System Call이 발생하면 user mode에서 kernel mode로 바뀌면서 interrupt(trap)이 발생한다. 보통은 API를 사용하여 System Call을 호출하고 이에 해당하는 작업을 kernel이 수행한다. 오늘은 이러한 System Call의 흐름이 linux kernel에서 어떻게 발생하는지 알아보고, 새로운 System Call을 추가하기 위해서는 어떤 작업을 해야 되는지 알아보자. 1. System Call을 정의하기 우선 기본적으로 System ..

리눅스 2021.02.08

Linux Kernel build_환경 구축(2)

이제 Oracle VM VirtualBox를 열어서 새로운 VM을 생성해보자 1. 상단의 '새로 만들기(N)'를 누른다. 2. 새롭게 생성할 VM의 이름과 생성할 파일을 지정하고, 연습을 위해 사용할 Ubuntu(64bit)을 선택해준다. 3. 이제 새로운 VM을 위해 가상 하드 디스크를 만들 차례이다. 앞에서 지정한 파일 위치에 'vdi'형식의 파일을 생성한다고 한다. 'vdi'는 Virtual Desktop Infrastructure의 약자로 마치 Window에 C드라이브가 있는 것처럼, 가상 머신에 가상 디스크를 할당해준다고 이해할 수 있다. 이 과정의 궁극적 목표가 새로운 kernel을 다운로드하고 build 한 뒤 install까지 하는 것이기 때문에 넉넉하게 40GB를 설정하였다. 정확히 이것..

리눅스 2021.01.27

Linux Kernel build_환경 구축(1)

리눅스 커널을 공부하기 위해서는 우선 리눅스 커널을 적용할 줄 알아야 된다. 비주얼 스튜디오로 자신이 작업한 코드를 돌려보고 실행 결과를 확인할 수 있는 것처럼, 리눅스 커널을 수정한 뒤 그 결과를 볼 수 있어야 된다. 그렇다면 리눅스 커널은 어떻게 빌드하는 것일까? 우선 리눅스 커널을 빌드하기 위해서는 컴퓨터가 필요하다. 현재 글을 쓰고 있는 내 노트북이 Window10으로 돌아가는 것처럼 다른 컴퓨터에 리눅스 OS를 설치하여 돌리는 것이다. 하지만 돈이 어디 있겠는가? 수업시간에 배운 가상 머신은 이럴 때 사용하는 것 같다. 다양한 선택지가 있었지만 나는 그 중 Oracle의 'virtual box'를 사용하기로 하였다. www.virtualbox.org/ Oracle VM VirtualBox Wel..

리눅스 2021.01.27