본문 바로가기

나름컴공이라공/Linux Kernel

(7)
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(4) ☆★☆2016.01.15 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 7. 가상 파일시스템(Virtual File System) -> 만약 가상 파일시스템이 없으면, 여러 가지 파일시스템의 파일을 읽고 쓰기 위해 각 파일시스템이 제공하는 함수를 찾아서 호출해야함 * 가상 파일시스템(VFS) 접근 방법 - 상위 계층에서 단일 함수를 통해 파일시스템이 접근하기 위해 인자에 담긴 파일이름과 파일시스템을 판단하여 고유의 함수를 호출 - 리눅스의 다양한 파일시스템 지원 가능 ex) Ext2 파일시스템이 /dev/hda2 파티션을 관리, b.txt 파일이 존재한다고 가정. 사용자가 b.txt 파일을 인자로 open() 시스템 콜을 호출했을 때, VFS는 이 파일이 어떤 파일시스템에 속..
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(3) ☆★☆2016.01.14 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 5. Ext2 파일시스템 ex) inode 2를 가진 '/' 디렉터리를 보면, i_mode 필드에서 이 파일이 디렉터리라는 것과 데이터 블록이 20번이고, 20번 데이터 블록에서는 inod 11인 일반파일 file1.c와 inode 12인 디렉터리 mydir가 있다는 것을 알 수 있다. ​ * 디스크 성능을 높이기 위해 서로 관련된 inode와 디스크 블록들을 인접한 실린더에 유지 -> 디스크 탐색시간을 줄이기 위해 이런 실린더를 블록 그룹으로 정의 - 파티션 : Boot block(부트스트랩 코드 존재), Block Group 0~N - Block Group : Super Block, Group Desc..
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(2) ☆★☆2016.01.14 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 3. FAT 파일시스템 * 파일시스템이 관리하는 데이터 : 메타데이터, 유저 데이터 * FAT 파일시스템 - 메타데이터 : FAT table, directory entry, super block * 디렉터리 엔트리(Directory entry) - name 필드 : 파일의 이름과 확장자를 담는 필드(msdos 파일시스템의 11자 이름 제약) - 파일 속성, 시간정보, 파일 크키(size), FAT 구조를 이요해 데이터 블록을 인덱싱하기 위해 첫 데이터 블록의 번호를 담는 start 변수... -> 다른 파일시스템의 디렉터리 엔트리도 비슷(디렉터리 구조체 선언, 파일생성시 구조체 내용 채워서 디스크에 저장)..
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(1) ☆★☆2016.01.13 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 1. 파일시스템 일반 * 파일시스템 : 보조 기억장치(ex 하드 디스크) 같은 저장장치를 관리하는 소프트웨어 - 기억장치는 한정, 내부/외부 단편화 최소화 * 메모리 관리 기법과 파일시스템의 차이 : naming 기법 - 메모리 관리 기법 + Naming = 파일시스템 - 파일시스템은 사용자에게 이름이라는 속성으로 접근되는 '파일'이라는 개념 제공 - 이름 값을 입력받아 해당 데이터 처리, 리턴 * 파일시스템의 하드디스크의 정보 - 메타 데이터 : 파일의 속성 정보, 이름 데이터 블록 인덱스 등.. 저장 - 사용자 데이터 : 실제 기록하려는 내용 저장 2. 디스크 구조와 블록 관리 기법 (그림참조) htt..
Linux Kernal Internal > Ch3 태스크 관리(3) ☆★☆2016.01.07 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 7. 런 큐와 스케줄링 - 스케줄링을 위한 수행 가능 상태의 태스크를 자료구조를 통해 관리 * 런 큐(run queue) : 리눅스에서의 스케줄링을 위한 자료구조 운영체제에 따라 1개, 여러개(CPU별 1개의 런 큐 유지) * 태스크 생성 - init_task 라는 헤더를 가진 이중 연결 리스트에 삽입 - 다중 CPU의 경우, 자식 태스크는 부모 태스크의 런 큐에 삽입(캐시 친화력↑) ​ - 대기 상태에서 깨어난 태스크는 대기 전의 런 큐에 삽입(캐시 친화력↑) + 캐시 친화력? 호출했던 것을 다시 호출할 확률 ↑(시간/공간 캐시) * 스케줄링 ① 실시간 태스크 스케줄링 - FIFO, RR : 우선 순위 ..
Linux Kernal Internal > Ch3 태스크 관리(2) ☆★☆2016.01.07 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 5. 태스크 문맥 * system context - 태스크 정보 유지 위해 할당한 자료구조 ex) task_struct, 파일 디스크립터, 파일 테이블, 세그먼트 테이블, 페이지 테이블... * memory context - text, data, stack, heap 영역, 스왑공간... * hardware context - 문맥 교환시, 태스크 현재 실행 위치 정보 유지 * task_struct 자료 구조 변수 - /usr/src/linux-headers-3.19.0-25/include/linux/sched.h 에서 확인 가능 ① task identification - 태스크를 인식하기 위한 변수들 ex..
Linux Kernal Internal > Ch3 태스크 관리(1) ☆★☆2016.01.07 작성☆★☆ ☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆ 1. 프로세스와 쓰레드 그리고 태스크 * 태스크(task) : 자원소유권의 단위 * 쓰레드(thread) : 수행의 단위 * 프로세스(process) : running or runnable program 동작중인 프로그램으로 정의. 동적인 객체가 프로세스가 됨. * 프로그램(program) : 디스크에 저장되어있는 수동적인 파일 형태 ≒ 실행파일. * 프로그램이 수행되기 위해서 자원을 할당 받은 것이 프로세스. 2. 사용자 입장에서 프로세스 구조 * 프로세스가 수행되기 위해서 여어 자원들(가상 주소 공간)을 커널로부터 할당 받아야 함 * 32bit CPU, 각 프로세스 4GB 가상공간(실제 물리주소x) 할..