본문 바로가기

카테고리 없음

리눅스 커널 심층 분석


책 내용은 전반적인 커널의 내부구조를 살펴본다는 점에서 꽤 괜찮은 편이나, 다소 깊이는 약한 편이고, 각 요소별 핵심적인 부분을 설명하지 않고 넘어가는 경우도많다.하지만 부담없이 읽을 수 있다는 장점은 있으며, 깊이를 보완하기 위해서ULK와 같이 보면 좋을 듯하다.또 한 가지 다른문제점은 번역이 다소 약한 편이어서, 중간 중간 오역이꽤있어서 이것이핵심 내용을 이해하는 데 방해가 될 때가 종종 있다.
이 책은 리눅스 커널의 핵심을 간결하면서도 심도있게 다루고 있다. 일반적인 운영체제에 대한 이해를 넘어, 여타 유닉스 시스템과 다른 리눅스만의 특징적인 부분에 대한 설계, 구현, 인터페이스 등을 이론과 실제 사이에서 균형감 있게 소개한다. 구체적으로 운영체제의 기본적인 기능인 프로세스 관리, 시스템 호출, 인터럽트 처리, 동기화, 메모리 관리, 파일 시스템, 이식성에 대한 내용 뿐 아니라, 최신 2.6 커널의 흥미로운 부분인 CFS 스케줄러, 커널 선점, 블럭 입출력 계층, 입출력 스케줄러 등의 내용을 상세히 다룬다.

1장 리눅스 커널 입문
___유닉스의 역사
___리눅스의 개발
___운영체제와 커널
___리눅스 커널과 전통적인 유닉스 커널
___리눅스 커널 버전
___리눅스 커널 개발 공동체
___시작하기 전에

2장 커널과의 첫 만남
___커널 소스 구하기
___Git 사용하기
___커널 소스 설치
___패치
___커널 소스 트리
___커널 빌드
___커널 설정
___빌드 메시지 최소화
___빌드 작업을 동시에 여러 개 실행
___새 커널 설치
___다른 성질의 야수
___libc와 표준 헤더 파일을 사용할 수 없음
___GNU C
___인라인 함수
___인라인 어셈블리
___분기 구문표시
___메모리 보호 없음
___부동 소수점을 (쉽게) 사용할 수 없음
___작은 고정 크기의 스택
___동기화와 동시성
___이식성의 중요성
___결론

3장 프로세스 관리
___프로세스
___프로세스 서술자와 태스크 구조체
___프로세스 서술자의 할당
___프로세스 서술자 저장
___프로세스 상태
___현재 프로세스 상태 조작
___프로세스 컨텍스트
___프로세스 계층 트리
___프로세스 생성
___Copy-on-Write
___프로세스 생성(forking)
___vfork()
___리눅스의 스레드 구현
___스레드 생성
___커널 스레드
___프로세스 종료
___프로세스 서술자 제거
___부모 없는 태스크의 딜레마
___결론

4장 프로세스 스케줄링
___멀티태스킹
___리눅스의 프로세스 스케줄러
___정책
___입출력중심 프로세스와 프로세서중심 프로세스
___프로세스 우선순위
___타임슬라이스
___스케줄러 정책의 동작
___리눅스 스케줄링 알고리즘
___스케줄러 클래스
___유닉스 시스템의 프로세스 스케줄링
___공정 스케줄링
___리눅스 스케줄링 구현
___시간 기록
___스케줄러 단위 구조체
___가상 실행시간
___프로세스 선택
___다음 작업 선택
___트리에 프로세스 추가
___트리에서 프로세스 제거
___스케줄러 진입 위치
___휴면과 깨어남
___대기열
___깨어남
___선점과 컨텍스트 전환
___사용자 선점
___커널 선점
___실시간 스케줄링 정책
___스케줄러 관련 시스템 호출
___스케줄링 정책과 우선순위 관련 시스템 호출
___프로세서 지속성(affinity) 관련 시스템 호출
___프로세서 시간 양보
___결론

5장 시스템 호출
___커널과 통신
___API, POSIX, C 라이브러리
___시스콜
___시스템 호출 번호
___시스템 호출 성능
___시스템 호출 핸들러
___알맞은 시스템 호출 찾기
___매개변수 전달
___시스템 호출 구현
___시스템 호출 구현
___매개변수 검사
___시스템 호출 컨텍스트
___시스템 호출 등록을 위한 마지막 단계
___사용자 공간에서 시스템 호출 사용
___시스템 호출을 구현하지 말아야 하는 이유
___결론

6장 커널 자료 구조
___연결 리스트
___단일 연결 리스트와 이중 연결 리스트
___환형 연결 리스트
___연결 리스트 내에서 이동
___리눅스 커널의 구현 방식
___연결 리스트 구조체
___연결 리스트 정의
___리스트 헤드
___연결 리스트 조작
___연결 리스트에 노드 추가
___연결 리스트에서 노드 제거
___연결 리스트의 노드 이동과 병합
___연결 리스트 탐색
___기본 방식
___실제 사용하는 방식
___역방향으로 리스트 탐색
___제거하면서 탐색
___다른 연결 리스트 함수
___큐
___kfifo
___큐 생성
___데이터를 큐에 넣기
___데이터를 큐에서 빼기
___큐의 크기 알아내기
___큐 재설정과 큐 삭제
___큐 사용 예제
___맵
___idr 초기화
___새로운 UID 할당
___UID 찾기
___UID 제거
___idr 제거
___이진 트리
___이진 탐색 트리
___자가 균형 이진 탐색 트리
___레드블랙 트리
___rbtree
___어떤 자료 구조를 언제 사용할 것인가?
___알고리즘 복잡도
___알고리즘
___O(빅오, 대문자오) 표기법
___빅 세타 표기법
___시간 복잡도
___결론

7장 인터럽트와 인터럽트 핸들러
___인터럽트와 인터럽트 핸들러
___전반부 처리와 후반부 처리
___인터럽트 핸들러 등록
___인터럽트 핸들러 플래그
___인터럽트 예제
___인터럽트 핸들러 해제
___인터럽트 핸들러 작성
___공유 핸들러
___인터럽트 핸들러의 실제 예
___인터럽트 컨텍스트
___인터럽트 핸들러 구현
___/proc/interrupts
___인터럽트 제어
___인터럽트 활성화와 비활성화
___특정 인터럽트 비활성화
___인터럽트 시스템 상태
___결론

8장 후반부 처리와 지연된 작업
___후반부 처리bottom half
___왜 후반부 처리를 하는가?
___후반부 처리의 세계
___원래의 ‘후반부 처리’
___태스크 큐
___softirq와 태스크릿
___혼란스러움을 떨쳐내기
___softirq
___softirq 구현
___softirq 핸들러
___softirq 실행
___softirq 사용
___인덱스 할당
___핸들러 등록
___softirq 올림
___태스크릿tasklet
___태스크릿 구현
___태스크릿 구조체
___태스크릿 스케줄링
___태스크릿 사용
___태스크릿 선언
___태스크릿 핸들러 작성
___태스크릿 스케줄링
___ksoftirqd
___구식 BH 처리 방식
___워크 큐
___워크 큐 구현
___스레드 표현 자료 구조
___작업 표현 자료 구조
___워크 큐 구현 정리
___워크 큐 사용
___작업 생성
___워크 큐 핸들러
___작업 스케줄링
___작업 비우기
___새로운 워크 큐 만들기
___구식 태스크 큐 방식
___어떤 후반부 처리 방식을 사용할 것인가?
___후반부 처리 작업 사이의 락
___후반부 처리 비활성화
___결론

9장 커널 동기화 개요
___위험 지역과 경쟁 조건
___왜 보호 장치가 필요한가?
___단일 변수
___락
___동시성의 원인
___보호 대상 인식
___데드락
___경쟁과 확장성
___결론

10장 커널 동기화 방법
___원자적 동작
___원자적 정수 연산
___64비트 원자적 연산
___원자적 비트 연산
___스핀락
___스핀락 사용 방법
___그 밖의 스핀락 함수
___스핀락과 후반부 처리
___리더?라이터 스핀락
___세마포어
___카운팅 세마포어와 바이너리 세마포어
___세마포어 생성과 초기화
___세마포어
___리더-라이터 세마포어
___뮤텍스(mutex)
___세마포어와 뮤텍스
___스핀락과 뮤텍스
___완료 변수
___큰 커널 락
___순차적 락
___선점 비활성화
___순차성(ordering)과 배리어(barrier)
___결론

11장 타이머와 시간 관리
___커널의 시간의 개념
___진동수: HZ
___이상적인 HZ 값
___큰 HZ 값의 장점
___큰 HZ 값의 단점
___지피(jiffies)
___지피의 내부 표현
___지피 값 되돌아감
___사용자 공간과 HZ 값
___하드웨어 시계와 타이머
___실시간 시계
___시스템 타이머
___타이머 인터럽트 핸들러
___날짜와 시간
___타이머
___타이머 사용
___타이머 경쟁 조건
___타이머 구현
___실행 지연
___루프 반복
___작은 지연
___schedule_timeout()
___schedule_timeout() 구현
___만료시간을 가지고 대기열에서 휴면
___결론

12장 메모리 관리
___페이지
___구역
___페이지 얻기
___0으로 채워진 페이지 얻기
___페이지 반환
___kmalloc()
___gfp_mask 플래그
___동작 지정자
___구역 지정자
___형식 플래그
___kfree()
___vmalloc()
___슬랩 계층
___슬랩 계층 설계
___슬랩 할당자 인터페이스
___캐시에서 할당
___슬랩 할당자 사용 예제
___스택에 정적으로 할당
___단일 페이지 커널 스택
___공정하게 스택 사용
___상위 메모리 연결
___고정 연결
___임시 연결
___CPU별 할당
___새로운 percpu 인터페이스
___컴파일 시점의 CPU별 데이터
___실행 시점의 CPU별 데이터
___CPU별 데이터를 사용하는 이유
___할당 방법 선택
___결론

13장 가상 파일시스템
___일반 파일시스템 인터페이스
___파일시스템 추상화 계층
___유닉스 파일시스템
___VFS 객체와 자료 구조
___슈퍼블록 객체
___슈퍼블록 동작
___아이노드 객체
___아이노드 동작
___덴트리 객체
___덴트리 상태___
___덴트리 캐시
___덴트리 동작
___파일 객체
___파일 동작
___파일시스템 관련 자료 구조
___프로세스 관련 자료구조
___결론

14장 블록 입출력 계층
___블록 장치 구조
___버퍼와 버퍼 헤드
___bio 구조체
___입출력 벡터
___신구 버전 비교
___요청 큐
___입출력 스케줄러
___입출력 스케줄러가 하는 일
___리누스 엘리베이터
___데드라인 입출력 스케줄러
___예측 입출력 스케줄러
___완전 공정 큐 입출력 스케줄러
___무동작 입출력 스케줄러
___입출력 스케줄러 선택
___결론

15장 프로세스 주소 공간
___주소 공간
___메모리 서술자
___메모리 서술자 할당
___메모리 서술자 해제
___mm_struct 구조체와 커널 스레드
___가상 메모리 영역
___VMA 플래그
___VMA 동작
___메모리 영역 리스트와 트리
___실제 메모리 영역
___메모리 영역 다루기
___find_vma()
___find_vma_prev()
___find_vma_intersection()
___mmap()와 do_mmap(): 주소 범위 생성
___munmap()와 do_munmap(): 주소 범위 해제
___페이지 테이블
___결론

16장 페이지 캐시와 페이지 지연 기록
___캐시 사용 방식
___쓰기 캐시
___캐시 축출
___가장 오래 전에 사용한 항목 제거
___이중 리스트 전략
___리눅스 페이지 캐시
___address_space 객체
___address_space 동작
___기수 트리
___구식 페이지 해시 테이블
___버퍼 캐시
___플러시 스레드
___랩탑 모드
___역사: bdflush, kupdated, pdflush
___다중 스레드 환경의 경쟁 상태 회피
___결론

17장 장치와 모듈
___장치 유형
___모듈
___Hello, World!
___모듈 만들기
___소스 트리에 들어 있는 경우
___소스 트리 외부에 있는 경우
___모듈 설치
___모듈 의존성 생성
___모듈 적재
___설정 옵션 관리
___모듈 인자
___노출 심볼exported symbols
___장치 모델
___Kobjects
___Ktypes
___Ksets___
___kobject, ktype, kset의 상관 관계
___kobject 관리와 변경
___참조 횟수
___참조 횟수 증감
___krefs
___sysfs
___sysfs에 kobject 추가와 제거
___sysfs에 파일 추가
___기본 속성
___새로운 속성 만들기
___속성 제거
___sysfs 관례
___커널 이벤트 계층
___결론

18장 디버깅
___시작하기
___커널 버그
___출력을 이용한 디버깅
___견고함
___로그수준
___로그 버퍼
___syslogd와 klogd
___printf()와 printk() 사용 혼동
___웁스
___ksymoops
___kallsyms
___커널 디버깅 옵션
___버그 확인과 정보 추출
___만능 SysRq 키
___커널 디버거의 전설
___gdb
___kgdb
___시스템 찔러 보기와 조사
___조건에 따른 UID 사용
___조건 변수
___통계
___디버깅 작업의 빈도와 발생 제한
___문제를 일으킨 변경 사항을 찾기 위한 이진 탐색
___Git을 사용한 이진 탐색
___모든 방법이 실패했을 때: 공동체
___결론

19장 이식성
___이식성 있는 운영체제
___리눅스 이식성의 역사
___워드 크기와 데이터 형
___불투명 데이터 형
___특수 데이터 형
___명시적으로 크기가 정해진 데이터 형
___문자 데이터 형의 부호유무
___데이터 정렬
___정렬 문제 피하기
___비표준 데이터 형의 정렬
___구조체 채우기
___바이트 순서
___시간
___페이지 크기
___프로세서 순서
___SMP, 커널 선점, 상위 메모리
___결론

20장 패치, 해킹, 공동체
___공동체
___리눅스 코딩 스타일
___들여쓰기
___switch 구문
___공백
___괄호
___줄 길이
___명명 방식
___함수
___주석
___형 지정
___기존 함수 사용
___소스에서 ifdef 사용 최소화
___구조체 초기화
___과거에 작성한 코드 소급 적용
___지휘 계통
___버그 리포트 제출
___패치
___패치 만들기
___Git을 사용해 패치 생성
___패치 제출
___결론

 

[고화질] 명탐정 코난 39

명탐정 코난 39권 리뷰! 명탐정 코난은 내가 중학생 때 처음 접하고 그 후로 엄청 오랫동안 보아온 책이다. 내용은 단순하다. 천재 고등학교 탐정 남도일이 우연히 놀이공원에서 검은 조직과 마주치고 어린아이가 되는 약을 먹고서 어린아이가 되어 코난으로 활약한다는 내용이다. 단권단권 끝나는 내용도 좋고 검은조직을 파헤친다는 메인스토리가 확실하게 있어서 보기에 참 좋은 만화이다. 추리는 억지스러운 것도 많지만 그래도 너무 재밌는 작품이다.명탐정 코난

iooiiuh.tistory.com

 

multiplier(승수) , participatory(참가하는) , bug(벌레)

완전기초생활영어평소 외워둔 영단어들도 안보다 보면 잊혀지곤 하죠 multiplier ( 승수 ) investment multiplier ( 투자승수 )A Comparative Study on the Multiplier Analysis between Final Demand Total Output and Final Output Based on the Models of IO OO and FF 최종수요 총산출 최종산출 사이의 승수효과분석에 관한 비교연구An A

uisdd.tistory.com