리눅스커널구조개요 Liux kere Iteras 2013. 4. 김영진 아주대학교전자공학과
리눅스의역사 1991 년에 Liux Torvads 에의해 UNIX 호환의커널설계목적으로처음개발 Liux 는 Uix 계열의현대적인, 무료운영체제로교육용 Uix 계열운영체제인 Miix (Taebaum, 1987) 를기반으로개발함 리눅스의역사는인터넷을통한전세계의수많은사용자에의한협동작업의결과 범용 PC 하드웨어상에서효율적이고신뢰성있게동작하도록설계되었지만, 다양한하드웨어플랫폼에서도잘동작
리눅스커널 (Liux Kere) 버전 0.01 (May 1991) 네트웍기능이없고 80386-호환인텔프로세서와 PC 하드웨어에서만동작 Liux 1.0 (March 1994) UNIX 의표준 TCP/IP 네트웍프로토콜들지원 Liux 2.0 (Jue 1996) 다중프로세서구조지원 Liux 2.2 (Jauary 1999) 다양한파일시스템지원 Liux 2.4 (Jauary 2001) 커널의여러제한을없애고대용량작업가능, 완전한 PP 지원 Liux 2.6 (December 2003) 커널의선점형동작 O(1) 스케줄러사용 ACPI 지원
리눅스커널 2.6 December 2003 안정버전배포 특징 핵심하드웨어지원 임베디드기기를위한크기축소 ucliux(mmu 지원없는리눅스 ) 통합으로 Hitachi H8/300, NEC v850, m68k 계열지원 서버기기등을위한크기확대 NUMA((No-Uiform Memory Access) 지원, 64 비트 CPU 들지원 하이퍼스레딩 Petium 4 이상에서동작, 하나의 CPU 로둘이상동작
리눅스커널 2.6 ( 계속 ) 시스템성능개선 디바이스지원개수증가 종래 256 개에서 4096 개로 프로세스 ID, 사용자, 그룹수증가 프로세스 ID - 종래 32768 개에서 10 억개 사용자, 그룹수 - 종래 65536 개에서 40 억개 응답성향상 커널의선점형동작 - 입출력인터럽트 ( 시스템호출 ) 시더높은우선순위프로세스가실행을준비하고있으면선점가능 O(1) 스케줄러사용 - 우선순위에따른다중준비큐지원 FUTEX(fast userspace mutex) 지원
리눅스커널 2.6 ( 계속 ) 모듈서브시스템과통합장치모델 (Uified Device Mode) 모듈서브시스템의안정성향상 디바이스정보지원 디바이스가 /sys 에마운트되어디바이스속성 / 개수 / 이름 / IRQ/DMA/ 전원공급상태등확인가능. 모듈지원하드웨어정보를모듈밖에공유하여대체디바이스로강제동작가능. 전원관리기능지원 ACPI 지원 데스크탑주변장치지원 PCI, USB, Fireire 등다양한장치의 hotpug 지원
리눅스커널 2.6 ( 계속 ) 시스템하드웨어지원 PP BIOS 기능, 다양한전용하드웨어지원다양한외부디바이스지원 USB 2.0 등다양한무선디바이스지원 IrDA, Buetooth 등 블록디바이스지원 다양한장치버스지원 ATA/IDE, SCSI, EDD BIOS 지원다양한파일시스템지원 ext2/ext3, Jouraig Fie Systems(ReiserFS, JFS, XFS), LDM(NTFS, FAT32 등 Widos 계열 ) 등지원 입출력지원 휴먼인터페이스장치지원개선 향상된모듈화, 비디오장치, 마우스, 키보드등지원확대사운드시스템변경 ALSA(Advaced Liux Soud Architecture) 지원
리눅스커널 2.6 ( 계속 ) 소프트웨어향상 다양한통신프로토콜지원 ipsec, ipv6 지원 네트웍파일시스템 (NFS) 강화 NFSv4 프로토콜지원, AFS 지원, CIFS 클라이언트기능지원 기타기능 보안기능 커널기반보안모듈지원, 모듈의시스템호출불가능 사용자모드리눅스 (User Mode Liux) 지원 리눅스상에서사용자모드로리눅스커널실행가능, 즉복수의리눅스실행가능 새로운커널설정환경 Kcofig 도입 ( 종래의 CML1/2 과다름 )
리눅스배포판 표준, 미리컴파일된패키지셋, 또는배포판들은기본리눅스시스템, 시스템설치및관리도구들, 공통 UNIX 도구들의인스톨패키지들포함 초기배포판은 SLS 와 Sackare 등. Fedora(Red Hat) 과 Debia, Ubutu 가대표적인상용및비상용배포판. RPM 패키지파일포맷은다양한리눅스배포판에서호환
리눅스라이센스 리눅스커널은 Geera Pubic Licese (GPL) 하에서배포 GPL 은 Free Softare Foudatio (FSF) 가정함 소프트웨어에관련된다섯가지의무 GNU 일반공중사용허가서는누구에게나다음의다섯가지의의무를저작권의한부분으로서강제한다. 1. 컴퓨터프로그램을어떠한목적으로든지사용할수있다. 다만법으로제한하는행위는할수없다. 2. 컴퓨터프로그램의실행복사본은언제나프로그램의소스코드와함께판매하거나소스코드를무료로배포해야한다. 3. 컴퓨터프로그램의소스코드를용도에따라변경할수있다. 4. 변경된컴퓨터프로그램역시프로그램의소스코드를반드시공개배포해야한다. 5. 변경된컴퓨터프로그램역시반드시똑같은라이선스를취해야한다. 즉 GPL 라이선스를적용해야한다.
리눅스커널 리눅스커널은모놀리딕 (mooithic) 커널임 파일은 / 디렉토리를기반으로단일 tree 구조로되어있음 인터럽트및시스템콜기반의동작 공유라이브러리 (shared ibrary) 지원 모듈 (modue) 에의한커널기능추가
리눅스부팅과정 (1) 시작 System Bios Boot maager Liux kere Iitd kogd xietd (pstree 명령어 ) xfs * ROM 에위치해있음 * 메모리체크및하드웨어초기화 * Boot Maager 실행 * 부팅매체의 0 번섹터 (MBR) 에위치, * 운영체제선택 * Liux kere 압축을풀고메모리에로딩 * 커널실행 (Boot Loader) * vmiuz 라는파일이름을가지고있음 * pid 0 인 sapper 가시스템체크및초기화 (dmesg 명령또는 /var/og/dmesg 파일 ) * pid 1 인 iit 를실행시킴 * 파일시스템구조검사 * 파일시스템마운트 * 서버데몬실행 * 사용자로그인및쉘실행
리눅스부팅과정 (2) 1) BIOS 가시스템이상여부테스트 -> 부트로더에서수행 2) 부팅할드라이브선택 -> 커널의플래쉬위치선택 3) 선택된드라이브의 MBR 읽어드림 -> 수행불필요 4) MBR 의파티션테이블을읽어부팅할파티션을선택 -> 수행불필요 5) 커널로드 -> 커널을램상으로복사 6) 커널압축해제 / 재배치 7) 장착된하드웨어검사, 장치드라이버설정 8) 파일시스템검사 -> 램디스크, jffs 이미지에포함 9) 파일시스템마운트 10) /etc/iittab 에서 iit 실행을위한설정내용확인 11) /sbi/iit 실행 (PID 가 1 이됨 ) 12) /etc/rc.d/rc.sysiit 실행 (hostame, 시스템점검, 모듈로딩 ) 13) /etc/rc.d/rc 실행 (rueve 에따른스크립트실행 ) 14) /etc/rc.d/rc.oca( 매번실행할내용입력 ) 15) /etc/rc.d/rc.seria ( 시리얼포트초기화 ) 16) ogi
디렉토리구조
리눅스디렉토리구조요약 /etc - 시스템설정파일디렉토리 (ex: /etc/io.cof, /etc/fstab..) /bi - 시스템의기초명령 (ex: gzip, su, tar, rpm, vi, mout..) /dev - 장치파일 (ex: /dev/hda, /dev/cdrom..) /ib - 시스템공유라이브러리디렉토리 /home - 사용자홈디렉토리 (ex: /home/ssyoo, /home/pirami..) /root - 루트사용자의홈디렉토리 /proc - 시스템정보디렉토리 (ex: /proc/cpuifo, proc/memifo..) /sbi - 시스템관리명령디렉토리 /tmp - 임시파일생성디렉토리 /var - 시스템가동중가변자료저장디렉토리 /usr - 애플리케이션이설치되는디렉토리, 커널소스는보통 /usr/src 에설치
디렉토리구조 / (root) /bi 루트디렉토리는최상위디렉토리이며, 모든디렉토리는 / 를기준으로생성된다. / 는모든디렉토리의출발점이자다른파티션의연결점으로, 일반적으로데이터를저장하지않는다. 예를들면 CD-ROM과같은장치의경우윈도우에서는 D 드라이브와같이순차적으로드라이브이름이할당되지만, 리눅스에서 CD-ROM을사용하려면마운트라는절차를통해 / 디렉토리하부디렉토리에붙여서사용하게된다. (ex : #mout /mt/cdrom/) 시스템을사용하기위한기본적인명령어가존재하며싱글모드로부팅할때사용하는명령어와시스템을복구할때사용하는명령어와시스템을복구할때사용하는필수명령어등이존재한다.
디렉토리구조 boot 부팅에필요한커널과부팅할때필요한핵심파일이들어있다. 부팅할때부트로더가커널의위치를참조하고해당커널은 /boot 디렉토리에존재한다. 일반적으로 8GB 이상의하드디스크는실린더를 1024 개이상으로형성하여 8GB 이상의하드디스크를구성한다. 과거의 8GB 이하의하드디스크는문제가없으나 8GB 이상의하드디스크는실린더개수가 1024 개를넘어서며, 리눅스커널이실린더 1024 이상을넘어서는곳에위치할경우부트로더가해당커널을불러들이지못하는문제가발생하였다. 이러한문제를해결하기위해제일먼저생성한최소한의파일시스템을 /boot 로연결하여커널이항상실린더 1024 안쪽에위치하게함으로생성된문제를해결하고자생성된디렉토리이다.
디렉토리구조 /dev /etc 리눅스에서장치사용할떄필요한장치파일이위치한다. 이디렉토리에는파일을저장하지않으며이러한장치파일은아주특별한경우가아니라면스스로생성하지않으므로, 해당디렉토리의내용은거의변경되지않는다. 리눅스에서사용되는 appicatio 과서버프로그램의환경설정에필요한설정파일이존재한다. 실행파일은존재하지않으며, 편집기를통해해당파일의변경을통해시스템의설정을변경하는디렉토리이므로수시로백업해두는것이좋다. /home 일반사용자의홈디렉토리가생성되는곳이다. (ftp, mysq, tomcat 등별도의공간을요구하는서비스를위한디렉토리로사용할수도있다.)
디렉토리구조 /ib 시스템운영및프로그램구동할때필요한공유라이브러리와부팅할때사용되는커널모듈이포함되어있다. /ib 내부의파일을함부로삭제하거나변경하면안된다. /ost+foud 시스템을부팅할때파일시스템의이상유무를진단하여문제가있으면구동되는 fsck(fie System Check) 명령어가사용되는디렉토리로개별파일시스템의최상위디렉토리마다존재한다. 만약파일시스템을점검할때파일이손상되었다면해당데이터를해당파일시스템에존재하는 ost+foud 디렉토리를이용하여복구과정을진행한다. 만약손상된데이터를복구하지못했다면문제가발생된파일시스템에존재하는 ost+foud 디렉토리에복구하지못한데이터파일이복사된다. ( 일반적인상황에서는이디렉토리에파일이존재하지않는것이정상이다.)
디렉토리구조 /misc /mt 시스템아키텍처에독립적인자료들이저장되는디렉토리로거의사용하지않는다. CD-ROM과플로피장치에대한기본마운트포인트를제공한다. 일반적으로해당디렉토리는비어있으며 CD-ROM이나플로피를마운트한후해당디렉토리로이동할경우해당매체의내용을볼수있다. Exampe :#mout /mt/cdrom (CD-ROM일경우 ) #mout /mt/foppy ( 플로피의경우 ) /opt add-o 패키지가설치되는디렉토리로서표준레드햇리눅스배보판에존재하지않는패키지가설치될경우이디렉토리에설치된다. ( 거의사용하지않는다.)
디렉토리구조 /proc 프로세스와시스템정보를제공하기위한목적으로설계된가상파일시스템을사용하는디렉토리이다. 프로그램을구동하게되면 /proc 에해당프로세스의 PID 번호에해당하는디렉토리를생성하여프로세스의진행상황을추적하고관리하기위한목적으로생성되었다. 디렉토리내에문자로이루어진이름의디렉토리와파일은시스템및커널정보를, 숫자로이루어진이름의디렉토리는현재실행되고있는프로세스의정보를담고있다. /proc 디렉토리의파일은 cat 혹은 more 명령어로읽을수있으며특정파일의경우 echo 혹은 sysct 과같은명령어로내용을변경할수도있다.
디렉토리구조 /sbi /tmp 관리자가사용하는시스템운영에필요한명령어가존재하는디렉토리. 일반사용자가 /sbi 디렉토리에들어있는명령어를실행할때, 절대경로를사용하지않으면명령어가존재하지않는다는메시지를받는다. (ex : /home/httpd2/bi 디렉토리에 htpassd 라는명령어를수행할경우, 환경변수에 /home/httpd2/bi 디렉토리가정의되어있지않다면, 이명령어를실행할때마다 /home/httpd2/bi/htpassd 라는절대경로로실행한다. ) 프로세스생성과정에서발생되는임시파일을저장하는디렉토리. 수시로파일이생성되고삭제된다. 시스템을재구동하는경우, 이디렉토리에존재하는파일은모두삭제되므로파일을저장하는용도로사용할수없다. 또한이디렉토리의속성을임의로변경하지않는것이좋다.
디렉토리구조 /usr /var 프로그램을설치할때패키지에포함된대부분의파일이이곳에설치된다. X 윈도우관련프로그램, 사용자명령어, 프로그램관련문서, 게임, C 프로그램의헤더파일, GNU ifo 파일, 라이브러리, 매뉴얼, 시스템명령어, 커널과패키지소스가이곳에설치된다. 내용이자주변경되는가변자료가저장된다. 시스템운영할때발생되는로그 (og), 메일송 / 수신할때임시로저장되는스풀 (spoo), 프린터로전송하기위해임시로저장하는프린트스풀데이터, 레드햇배보판에서패키지로제공하는아파치 (apache) 웹서버관련자료 (/var/), MySQL 의데이터베이스, FTP 의최상위디렉토리등이그대표적이예이다. 만일이러한서비스를제공하는서버로리눅스를운영한다면, /var 디렉토리를만드는것이좋다.
프로세스관리 task_struct 라는자료구조를사용 모든태스크들에게하나씩할당 icude/iux/sched.h 태스크 ID, 상태정보, 가족관계, 명령, 데이터, 시그널, 우선순위, CPU 사용량및파일디스크립터등생성된태스크의모든정보를가짐
프로세스관리 태스크상태정보에관련된변수 #defie TASK_RUNNING 0 #defie TASK_INTERRUPTIBLE 1 #defie TASK_UNINTERRUPTIBLE 2 #defie TASK_ZOMBIE 4 #defie TASK_STOPPED 8 TASK_RUNNING 실행중이거나준비상태 TASK_UNINTERRUPT 하드웨어적인조건을기다리는상태, 시그널을받아도무시 예 ) process가장치파일을열때해당장치드라이버가자신이다룰하드웨어장치가있는지조사할때, memory sappig TASK_INTERRUPT 하드웨어나시스템자원을사용할수있을때까지기다리고있는대기상태 예 ) ait for a semaphore
프로세스관리 TASK_STOPPED 수행중단상태 ( 시그널을받거나트레이싱등 ) TASK_ZOMBIE process 실행은종료했지만아직 process 의정보를반환하지않은상태 dispatch ruig exit fork ready timeout seep, ock zombie ait akeup, uock ait
메모리관리
메모리관리
파일시스템 task 1 task 2. task System ca iterface User mode System mode Virtua Fie System ext2 fs coda dosfs.tfs procfs buffer cache Fie System device driver
파일시스템
파일시스템 iode 정의 Liux 에서파일을관리하기위한객체 파일이새로생성되면만들어진다. 파일의모든정보를관리 파일에속한블록위치 (idex bock 방법과유사 ) 파일소유자및접근권한 파일시간정보 파일유형 : 커널은정규파일뿐만아니라디렉토리, 디바이스, 파이프, 소켓등도파일이라는추상화객체로관리 Disk 에정적으로존재
iode 구현 파일시스템 iode i_iode_umber i_mode i_ik, i_dev i_uid, gid i_op i_atime, ctime, mtime type (4bit) u g s r x r x r x S_IFSOCK S_IFLNK S_IFREG S_IFBLK S_IFDIR S_IFCHR S_IFIFO 12 direct bock. 3 idirect bock
파일시스템 파일생성 creat(), ope() ith create optio, mkfifo(), mkod() iode와데이터블록들을할당파일접근 ope(), cose(), read(), rite() iode와 task_struct 연결파일제어 stat() seek(), dup(), ik() mkdir(), readdir() 파일시스템제어 mout() syc(), fsck()
파일시스템 fd(fie descriptor): detais of ope() system ca 디스크에서접근하려는파일의 iode 를찾는다. iode 를메모리로읽는다. iode 와 task 자료구조를연결한다 ( 이때 fd 사용 ) task_struct fies... fie_descriptor /* icude/iux/sched.h */ fie structure /* icude/iux/fs.h */ off iode /* icude/iux/ext2_fs_i.h */ TSS thread structure F 이구조에서 read() 나 rite() 지원가능
임베디드리눅스 (1) 임베디드리눅스출현배경 H/W 의발전 32/64bit 고성능 CPU S/W 의많은기능요구 OS 의기능이중요, 안정된운영체제의제공 ( 멀티태스킹의제공 ) 강력하고다양한네트워크환경의제공다양한형태의파일시스템과실행파일포맷지원확장성의다양함과용이함의제공 Free Softare
임베디드리눅스 (2) 임베디드리눅스장점 기능성과확장성이우수 ( 리눅스이용에따른장점 ) PoerPC, ARM, MIPS 등다양한 CPU Patform지원함 로열티가없으므로가격경쟁력이우수 사용자층이넓어오류수정이빠르고안정성이우수 기존의데스크탑개발환경과동일하여개발이용이함임베디드리눅스단점 기존의 RTOS보다많은메모리를요구함 범용 OS로설계되어 Rea-Time을지원하지못함 개발환경이 Text 기반의환경임으로개발에어려움이있음 GUI 환경을개발하기어려움 제품화하기위한솔루션구성이어려움 많은업체들과개발자들이독자적으로개발하고있어표준화가어려움
Backup sides
디렉토리구조
디렉토리구조 arch 모든아키텍처및 CPU에종속적인커널코드를포함각아키텍처별로부트관련코드들이존재지원하는아키텍처별로하위디렉토리가구성 예 ) i386, apha, arm icude iit ipc 커널코드를빌드하는데필요한모든인클루드 (icude) 파일들지원하는아키텍처별로하나씩서브디렉토리가존재인텔 i386 계열 : icude/asm-i386 icude/asm 서브디렉토리 : 현재아키텍처에필요한실제디렉토리로소프트링크 커널의초기화코드, 커널의메인함수 프로세스간통신코드기능을위한코드
디렉토리구조 mm 모든메모리관리코드 arch/ 해당아키텍처 /mm/ drivers 아키텍처에종속적인메모리관리코드예 ) arch/i386/mm/faut.c 모든시스템의디바이스드라이버 디바이스드라이버의유형별로세분화 블록디바이스드라이버, 문자디바이스드라이버, 네트워크디바이스드라이버 fs 파일시스템코드파일시스템별로하나씩디렉토리가세분화 예 ) vfat, ext2, ext3, fs, tfs,
디렉토리구조 kere 메인커널코드 ( 커널관리루틴의코어 ) et ib 프로세스, 인터럽트처리, 타이머, 시그널, 프로그램의실행 아키텍처종속적인커널코드는 arch/ 해당아키텍처 /kere에존재 커널의네트워크관련코드 다양한네트워크프로토콜, etheret, appetak, ipv4(6), buetooth 커널의라이브러리코드아키텍처종속적인라이브러리코드는 arch/ 해당아키텍처 /ib/ 에존재 scripts 커널을설정하는데사용되는스크립트
Liux 커널소스트리구조 kere ipc ib mm apha i386 m68k mips ppc sparc arm Doc arch fs boot kere ib math-emu mm /usr/src/iux iit icude et coda asm-apha ext2 asm-arm hpfs msdos asm-i386 fs iux isofs et tfs scsi video scripts driver 802 appetak decet etheret ipv4 uix surpc x25 bock cdrom char et pci pp sbus scsi soud video 임베디드시스템소프트웨어의주관심영역을노란색으로표식
각디렉토리설명 (1) arch/ CPU 종속적인부분, 각처리기마다하위디렉토리로구성됨 (arch/arm, arch/i386, arch/apha ) arch/arm/boot/ 부트스트랩핑코드 arch/arm/kere/ 하드웨어종속적인 (hardare depedet) 커널관리루틴트랩, 인터럽트처리루틴문맥교환루틴장치구성, 초기화루틴 arch/arm/mm/ 하드웨어종속적인메모리관리루틴 iit/ 하드웨어독립적인커널초기화루틴 (start_kere) 태스크 0 (iit_task or task[0]) 생성 태스크 1, 2, 3 등데몬프로세스생성
각디렉토리설명 (2) kere/ 리눅스커널의가장중심적인디렉토리 (cetra sectio of the kere) 하드웨어독립적인커널관리루틴 ( 하드웨어종속적인커널관리루틴은 arch/arm/kere 디렉토리에존재 ) fork, exit 등태스크관련시스템호출처리루틴 스케줄러 (scheduer) 루틴 시그널처리 (siga hadig)/ 시간관리 (time maagemet) 루틴 mm/ fs/ 하드웨어독립적인메모리관리루틴 ( 하드웨어종속적인메모리관리루틴은 arch/arm/mm 디렉토리에존재 ) 가상메모리관리, 페이징 (pagig), 스와핑 (sappig) 가상파일시스템 (virtua fie system ) 관리루틴 ope, read 등태스크관련시스템호출처리루틴특정파일시스템관리루틴은하위디렉토리에존재 (ext2, ext3, ramfs, miix, jffs2, proc, fs, msdos, coda,.. )
각디렉토리설명 (3) drivers/ 개개의장치를제어하기위한장치드라이버루틴 디바이스드라이버는크게문자 / 블록 / 네트워크드라이버로구분 drivers/bock/ : 블록장치드라이버. 예를들어 IDE 디스크 (hd) drivers/char/ : 문자장치드라이버. seria ports, tty, modem,..) drivers/et : 네트웍장치드라이버. 예를들어 3C509,... drivers/pci/ : PCI bus 제어 drivers/soud/ : soud card 드라이버 drivers/cdrom/ : CD-ROM 드라이버 drivers/scsi/ : SCSI 인터페이스관리 ipc/ 프로세스간통신을지원하기위한루틴세마포어 (semaphores), 공유메모리 (shared memory), 메시지큐 (message queues)
각디렉토리설명 (4) et/ TCP/IP, ARP 등네트웍통신프로토콜 ( 네트웍장치드라이버는 drivers/et에존재 ) 소켓인터페이스 icude/ 커널헤더 하드웨어독립적인헤더 : icude/iux/ 하드웨어종속적인헤더 : icude/asm-***/ ( 예를들어 ARM CPU 종속적인헤더는 icude/asm-arm/ 디렉토리에존재 ) modues/ 커널모듈루틴 모듈은 ismod(modprobe), rmmod 등의명령으로동적적재 / 제거가능 ib/ 커널라이브러리루틴 doc/ or Documetatio/ 커널문서디렉토리.