본문 바로가기

리눅스 커널 Linux kernel

우분투 안드로이드 빌드 해보기 (fail) - 1 한번에 포스팅 하려 했는데, 그림이 많은 관계로 나눕니다. 그리고 결국엔 이 포스팅은 시도로 끝납니다. 또 실패했습니다. 현재 우분투(13.04)에서 안드로이드를 빌드해보기 위해 준비 중입니다. 이를 하는 목적은 안드로이드에 대한 block trace를 얻기 위함입니다. http://www.android-x86.org/ 이 페이지에 들어가셔서 iso 파일을 받아 vmware에 설치하는 것도 가능합니다. 이렇게 되면 vmware에 안드로이드 기기가 설치되어 eclipse 보다 나은 속도감을 느끼실 수 있습니다. 로딩 시간 자체부터 차이가 납니다. 먼저 어떤 버전을 빌드 할 것인지를 정해야 합니다. android-x86-v0.9 (obsolete) Based on Android 1.5 release (Cup.. 더보기
9장 네트워킹 - 2 통신 프로토콜은 네트워킹-1의 포스팅에서와 같이 계층 구조로 이루어져 있고 이는 계층 구조에서 그 흐름이 다양하게 분기될 수 있음을 의미합니다. 리눅스는 이를 지원하기 위해 층과 층 사이에서 제어가 전달될 때 자료구조를 이용한 간접 호출 방법으로 통신 프로토콜을 구현하였습니다. 즉 상위 측이 하위 층을 직접 호출하는 것이 아닌 하위 층이 그 시작 주소를 특정 자료구조에 등록함으로 상위 층에선 자료구조에 등록된 함수만을 간접 호출합니다. 리눅스에서 통신 프로토콜을 나타내는 대표적인 자료구조로는 아래와 같은 것들이 있고 그 위치 또한 리눅스 3.10버전에서 직접 찾아보았습니다. 계층 자료구조 이름 위치 위의 자료구조들은 아래의 그림을 거쳐서 이용됩니다. socket 자료구조는 중복입니다. 위쪽은 socket.. 더보기
9장 네트워킹 - 1 컴퓨터는 통신 프로토콜이라는 하나의 약속을 정해 서로 통신을 하게 됩니다. 네트워크에선 사람들의 이름처럼 구별할 수 있는 고유의 명칭이 필요합니다. 이를 NIC(Network Interface Card)마다 지정되어 있는 IP주소를 통해 표현합니다. 한 컴퓨터에서 다양한 사용자 프로그램들이 한 개의 NIC를 통해 동시에 통신하려는 경우엔 각각의 사용자 태스크를 구분하기 위해 고유의 번호가 필요해집니다. 이를 포트(port) 번호라고 합니다. 통신을 하기 위한 양측은 서로 IP주소와 포트 번호를 알고 있어야 하고 미리 정해진 약속, 즉 프로토콜을 지켜야만이 통신이 가능해집니다. 프로토콜은 계층 구조로 이루어져 있습니다. OSI 7 계층이라고 1학년 때 컴퓨터 개론들을 때, 정보처리 산업기사 공부할 때 들었.. 더보기
6장 인터럽트와 트랩 그리고 시스템 호출 1.인터럽트 처리과정 먼저 인터럽트란 주변 장치와 커널의 통신 방식으로 주변 장치나 CPU가 자신에게 발생한 사건을 리눅스 커널에게 알리는 메커니즘으로 외부 인터럽트와 트랩이 있습니다. 외부 인터럽트현재 수행중인 태스크와 관련 없는 주변장치에서 발생된 비동기적 하드웨어 사건(비동기적이란 뜻은 언제 발생할지 그 시간을 정확히 알 수 없다는 뜻을 말합니다.)트랩동기적으로 발생하는 사건, 0으로 나누기, 세그멘테이션 폴트인터럽트나 트랩이 발생하면, program counter를 정해진 특정 번지로 변경해 처리 루틴이 적절한 작업을 하게 됩니다. 리눅스는 외부 인터럽트와 트랩을 통일하게 처리합니다. 다양한 CPU에서 커널 내부구조의 수정 없이 인터럽트를 처리하기 위해 idt_table의 0~31까지는 트랩을 할.. 더보기
5장 파일 시스템과 가상 파일 시스템 - 2 4. inode 구조 예전 리눅스에서 사용했던 ext2파일시스템의 inode 파일의 최대 크기에 대하여 계산을 해보도록 하겠습니다. 만약, 4KB 인덱스 블록을 이용할 경우 4Byte로 주소를 표현한다고 할 때 총 1024개의 포인터를 갖습니다. 이때 직접 블록은 12개로 12*4KB이고, 단일 간접 블록은 210*4(KB)로 4MB , 이중 간접 블록은 210*210*4(KB)로 4GB, 삼중 간접 블록은 210*210*210*4(KB)로 4TB를 이론적으로 표현할 수 있습니다. 하지만 ext2(3)에선 실제로 4GB 정도만을 지원합니다. 새롭게 도입된 ext4에선 이러한 제한을 해결하였습니다. ext2_dir_entry자료구조에 대해서 알아보겠습니다. inodeInode Numberrec_lenDir.. 더보기
우분투 vim 플러그인 설치 – nerd tree 이 문서의 우분투 버전은 Linux ubuntu 3.10.1 입니다. vm은 가상 머신 위에서 돌리고 있어서 인 것 같습니다. 커널 분석을 위해 우분투 vim에 플러그인 설치했던 과정을 돌이켜 보겠습니다. 설치했던 플러그인은 ctags, nerd tree, source explorer 이 세 가지로 『코드로 알아보는 ARM 리눅스 커널』이란 도서의 앞 부분에 더 자세히 설명되어져 있습니다. 먼저 vim이 우분투에 있어야 합니다. 위의 명령어로 vim을 설치합니다. vim 설치가 끝나고 vim 명령을 입력하면 다음과 같은 vim 실행 화면을 얻을 수 있습니다. vim의 설치는 끝났고 이제 ctags, nerd tree, source explorer 플러그인을 받습니다. vim 공식홈페이지로 이동해 www... 더보기
5장 파일 시스템과 가상 파일 시스템 - 1 1.파일 시스템 일반 메모리 관리기법과 파일 시스템 모두 내/외부 단편화를 최소화하기 위해 노력합니다. 쉽게 생각하면 파일 시스템은 메모리 관리 기법에 '이름'이 추가된 것으로 생각할 수 있습니다. 실제로 파일 시스템이 하드디스크에 저장하는 정보는 메타데이터(정보의 정보로 파일이름, 생성시간과 같은 부가적인 정보를 말합니다.)와 사용자 데이터로 구분할 수 있습니다. 2.디스크 구조와 블록 관리 기법 하드디스크는 plotter, arm, head 등으로 이루어져 있습니다. 이들은 디스크의 물리적 특성을 결정합니다. plotter에는 원모양의 track이 있고, 이 track들이 모여 cylinder를 이룹니다. track은 512byte 단위의 sector로 구분됩니다. 디스크에서 데이터를 접근하는데 걸리.. 더보기
4장 메모리관리 - 2 4. 가상메모리 기법 리눅스에서 태스크를 관리하는 자료구조는 task_struct 자료구조 입니다. 이 task_struct 자료구조와 태스크의 가상 주소 공간의 관계에 대해 알아보겠습니다. 가상 메모리 관련 정보는 task_struct안의 mm필드에서 관리합니다. 이 필드는 크게 세 부분으로 나뉘어질 수 있습니다. vm_area_struct구조체태스크 구성, 같은 속성을 갖는 연속된 영역 region으로 관리pgd페이지 디렉터리의 시작점 주소가상메모리 구조 변수 vm_area_struct : 세그먼트의 시작주소, 끝 주소, region의 접근제어 플래그 변수 ┕ 이 세그먼트가 실제 실행 파일의 어느 위치에 있는지에 대한 정보를 vm_file와 vm_offset 변수로 관리하고, 페이지 폴트가 발생하면 .. 더보기
4장 메모리 관리 -1 메모리 관리 기법과 가상 메모리 물리 메모리의 한계를 극복하기 위해 가상메모리가 도입되었습니다. 프로그램들은 32bit 환경에서 232만큼, 즉 4GB 의 메모리 공간을 이용할 수 있게 되었습니다. 이는 물리적 4GB가 아닌 개념적인 공간으로 실제 동작에서는 필요한 만큼의 물리메모리를 제공합니다. 이렇게 가상메모리를 도입하므로 개념적으로 프로그램은 메모리 공간을 물리 메모리의 크기와는 상관없이 큰 공간을 이용할 수 있게 되었고, 실제 물리 메모리에선 필요한 만큼의 메모리 공간만 제공하므로 가능한 많은 태스크를 동시에 수행할 수 있게 되었습니다. 물리 메모리 관리 자료 구조 전체 물리 메모리의 정보를 표현하는 적절한 자료구조가 필요합니다. 2-1. NODE 리눅스에서 접근 속도가 같은 메모리의 집합을 뱅크.. 더보기
3장 태스크 관리 - 1 2장에서는 리눅스 커널의 내부 구조에 대해 간략하게 살펴보았습니다. 3장에선 태스크에 대해 배웁니다. 태스크란 '자원 소유권의 단위'를 말합니다. 프로세스란 동작중인 프로그램으로서 디스크에 저장되어있는 실행 가능한 형태의 파일입니다. ┕ 바이너리 기계 명령어, 수행에 필요한 자료들의 집합을 의미합니다. 실행파일 자체는 그저 디스크에 저장된 수동적인 존재로 프로그램이 동작하기 위해선 리눅스 커널로부터 CPU 등의 자원을 할당 받을 수 있는 동적인 객체가 되어야만 합니다. ┕ 이를 프로세스 라 부르고 프로세스는 커널의 적절한 스케쥴링에 의해 할당 받은 자신만의 자원을 가지고 CPU가 기계어 명령들을 실행함 에 따라 끊임없이 변화하는 동적인 존재를 말합니다. 프로세스에 대해 사용자 입장과 커널 입장에서 살펴보.. 더보기