장 | 페이지 | 오탈자 내용 | 등록일 | 쇄 |
---|---|---|---|---|
1 | 38 | (38) 38페이지의 13번째 줄 | 2011-08-07 | 4 |
2 | 64 | (2장 64페이지 표2-3 아래) 커널은 __KERNEL 매크로에 의해 만들어진 값을 | 2009-05-15 | 2 |
2 | 68 | ((68)) 각 프로세스마다 220개의 엔트리를 포함하는~ 내용을 | 2011-02-16 | 3 |
2 | 68 | (68) 각 프로세스마다 220개의 엔트리를 포함하는 | 2009-02-25 | 1 |
2 | 73 | (73 페이지 맨 아래 단락, 첫 번째 항목) 램 64GB를 개별 페이지 프레임 224개로 나누고, | 2009-05-18 | 2 |
3 | 74 | (3쇄 74페이지 첫째줄) '32바이트(25)의 배수로'를 | 2011-02-18 | 3 |
2 | 81 | (81페이지 3번째 줄) LARGE_PAGE_SIZE는 PMD_SIZE(2PMD_SHIFT)와 동일하다. | 2009-06-02 | 2 |
2 | 81 | (81페이지 PUD_SHIFT 설명) PUD_SIZE 매크로는 전역 디렉토리의 엔트리.. | 2009-06-02 | 2 |
2 | 81 | (81페이지 PGDIR_SHIFT 설명) PGDIR_MASK 매크로는 오프셋과 테이블, 중간 디렉토리 필드를 모두 마스크한다. | 2009-06-02 | 2 |
2 | 81 | (81페이지 중간) PTRS_PER_PTE, PTRS_PER_PMD, PTRS_PER_PGD | 2009-06-03 | 2 |
2 | 81 | ((p 81) 페이지 테이블 다루기 두번째줄) PAE 기능을 사용할 때 32비트의 데이터 타입이고, 사용하지 않을 때는 64비트의 데이터 타입이다. | 2007-03-06 | 1 |
2 | 81 | ((81페이지 중간)) PTRS_PER_PVD를 PTRS_PER_PUD로 수정함. | 2011-02-16 | 3 |
2 | 82 | (82페이지 중간) pte_bad()라는 매크로는 없는데, ... | 2009-06-03 | 2 |
2 | 84 | (84페이지 표 2-7 pmd_offset 설명) 페이지 중간 디렉토리에서 addr 에 해당하는 엔트리의... | 2009-06-16 | 2 |
2 | 84 | (84페이지 표 2-7 pte_offset_map 설명) pte_offset_ map_nested과 pte_unmap_nested는... | 2009-06-17 | 2 |
2 | 85 | (85페이지 표 2-8 pte_alloc_kernel 설명) 페이지 중간 디렉토리에서 주소 addr에 해당하는 엔트리 pmd NULL이면 | 2009-06-17 | 2 |
2 | 86 | (86페이지 맨 아래 문단 첫번째 줄) 나중에 커널은 setup_memory_region() 함수를 실행하는데, | 2009-06-18 | 2 |
2 | 87 | ((87페이지, 표 2-10 내 두번째 줄]) 가장 사용하기 좋은 페이지 프레임 번호 | 2007-05-25 | 1 |
2 | 88 | (88페이지 그림 2-13) [그림 2-13] 리눅스 2.6에서 처음 512개(2MB)의 페이지 프레임 | 2009-06-19 | 2 |
2 | 93 | (93페이지 첫번째 줄) zap_low_mapping 함수를 호출하여 | 2009-06-18 | 2 |
2 | 93 | (15번째 줄) X_PAGE_OFFSET(3G)으로 매핑한다 | 2009-06-19 | 2 |
2 | 94 | (첫 번째 문단 끝에서 두번째 줄) 결론적으로 컴파일러는 0xffffe000-(3<<PAGE_SHIFT)값을 계산해서 | 2009-06-19 | 2 |
3 | 100 | (100 페이지 맨 아래 줄) 스레드 그룹에 대해서는 이 장의 후반부에서 상세히 다룬다. | 2009-09-14 | 2 |
3 | 105 | ((p 105,106) 현재 프로세스를 구별하기) p 105 => 사실상 thread_info...... | 2007-03-06 | 1 |
3 | 112 | ((p 112) 첫번째 단락) PID가 2,890과 29,384.... | 2007-03-06 | 1 |
3 | 112 | (112 페이지, 그림 3-5) PID hash table 왼쪽의 숫자에서 | 2009-09-14 | 2 |
3 | 116 | (116 페이지 대기큐 처리 밑 5번째 줄) init_waitqueue_head(q, p) 함수는... | 2008-01-22 | 1 |
3 | 118 | (세 번째 문단 두 번째 줄) 예를 들어, wait_event_(wq, condition) 매크로는 | 2009-09-15 | 2 |
3 | 119 | (119 페이지 5번째 단락) wake_up_locked 매크로는 ... 는 것을 제외하고는 wak_up과 비슷하다. | 2009-09-15 | 2 |
3 | 120 | (120 페이지 두번째 문단) 자원 제한은 프로세스 시그널 디스크립터의 current->signal → rlim 필드에 저장된다. | 2009-09-15 | 2 |
3 | 124 | (switch_to 매크로 아래 첫번째 문단) 이 매크로는 커널에서 가장 의존적인 하드웨어 | 2009-09-15 | 2 |
3 | 128 | (128 - 129 페이지 8번 항목) io_bitmap 필드 | 2009-09-15 | 2 |
3 | 129 | (두 번째 문단) TSS의 io_bitmap 필드는 TSS 내에서 비트맵이 저장된 위치 값을 가지고 있다. 0x8000과 0x9000이 TSS 범위를 벗어나면 사용자 모드 프로세스가 입출력 포트를 접근할 때마다 "일반 보호" 예외가 발생할 것이다. | 2009-09-15 | 2 |
3 | 129 | (다섯 번째 문단) _switch_to()가 수행되는 동안 eax 값은 보존되어야 한다. | 2009-09-15 | 2 |
3 | 132 | (중간 제목) FUP 레지스터 로딩하기 | 2009-09-15 | 2 |
3 | 134 | (ptid 항목) 새 경량 프로세스의 PID가 저장된 부모 프로세스의 사용자 모드 변수의 주소를 지정한다. | 2009-09-15 | 2 |
3 | 136 | (첫 번째 문단) 이 함수는 다음과 같은 단계를 수행한다. | 2009-09-15 | 2 |
3 | 136 | (reg 항목) 사용자 모드에서 커널 모드로 전환할 때 커널 모드 스택에 저장될 범용 레지스터 값의 포인터이다. | 2009-09-15 | 2 |
3 | 136 | (do_fork 함수 2번 과정) 값이 0이 아니므로 부모 프로세스가 다른 프로세스에 의해 추적되고 있으면 do_fork() 함수는 디버거가 부모 프로세스의 CLONE_PTRACE 플래그와 상관없이 자식 프로세스를 추적하기 원하는지 확인한다. | 2009-09-16 | 2 |
3 | 138 | (3.c 과정) 그리고 TI 지역 변수에 메모리 영역 주소를 저장한다. | 2009-09-16 | 2 |
3 | 138 | (4번 과정) ...에 저장된 값이 사용자가 소유한 프로세스들의 현재 값 이하인지를 확인하고, | 2009-09-16 | 2 |
3 | 139 | ((3장프로세스, 139페이지)) 139페이지의 | 2011-02-16 | 3 |
3 | 139 | (3장프로세스, 139페이지) a. 큰 커널 락카운트(Lock Counter) task->did_exec | 2009-02-19 | 1 |
4 | 153 | (3번째 문단 5번째 줄) 최근의 마더보드는 칩의 양쪽 기능을 모두 가지고 있다. | 2009-09-24 | 2 |
4 | 156 | (156페이지 (19번 항목)) "SIMD 부동 소수점 예외" (중단) | 2011-02-16 | 3 |
4 | 156 | (12번 항목) "스택 세그먼트(Stack Segment)" (폴트) | 2009-09-24 | 2 |
4 | 156 | (맨 아래 주석) ... 저장할 수 없을 때에도 예외를 발생시킨다 | 2009-09-24 | 2 |
4 | 156 | (19번 항목) "SIMD 부동 소수점" (중단) | 2009-09-24 | 2 |
4 | 157 | (표 4-1) 12번. | 2009-09-24 | 2 |
4 | 157 | (3번째 문단) 기본 선형 주소와 범위(최대 길이)가 들어간다. | 2009-09-24 | 2 |
4 | 158 | (158 페이지) 테스크 게이트 | 2009-09-24 | 2 |
4 | 163 | (162-163 페이지) 162, 밑에서 세 번째 문단 | 2009-09-24 | 2 |
4 | 163 | (163 페이지 4번째 문단) 대부분의 예외 핸들러를 테스크 게이트를 통해 실행한다. | 2009-09-24 | 2 |
5 | 206 | (206 페이지 커널 선점 아래 첫번째 항목) 하지만 커널 모드에서 동작중인 프로세스가 프로세스 전환을 유도하는 비동기적 사건(예를 들어 우 선순위가 높은 프로세스를 깨우는 인터럽트 핸들러)에 반응하는 방식은 비선점형 커널과는 다르다. | 2009-09-30 | 2 |
5 | 207 | (207 페이지 표 5-1 바로 위) [표 5-1]에 열거된 몇 가지 간단한 매크로는 필드에서 선점 카운트를 처리한다. | 2009-09-30 | 2 |
5 | 208 | (208 페이지 맨 아래) 많은 CPU가 같은 시각에 커널 코드를 수행하거나 | 2009-09-30 | 2 |
5 | 210 | (CPU당 변수 아래 3번째 문단) 만 이것은 두 CPU 이상에 걸쳐있는 자료가 논리적으로 나뉘어 질수 있는 특별한 경우에만 CPU당 변수가 사용될 수 있음을 의미한다. | 2009-09-30 | 2 |
5 | 210 | (210 페이지 CPU당 변수 아래 4번째 문단) 그래서 CPU당 배열에 동시에 접근하는 것은 캐시라인 스누핑이나 무효값을 초래하는데, 이것은 시스템 능률을 떨어뜨린다. | 2009-09-30 | 2 |
5 | 211 | (원자적인 연산 아래 2번째 문단) 먼저 두 CPU는 동일한 메모리 위치를 읽으려고 시도하면 | 2009-10-01 | 2 |
5 | 211 | (원자적인 연산 아래 2번째 문단) 다음으로 두 CPU 모두 똑같은 값을 해당 메모리 위치에 사용한다. | 2009-10-01 | 2 |
5 | 214 | (214 페이지 맨 아래 문단) 스택의 맨 위에 있는 메모리 위치에 0을 추가한다. | 2009-10-01 | 2 |
5 | 216 | (표 5-7 제목) 스핀 락 함수 | 2009-10-04 | 2 |
5` | 216 | (216쪽 (표 5-7 제목)) 표 5-7의 제목을 | 2011-02-16 | 3 |
5 | 217 | (2번째 줄) 스핀락 | 2009-10-04 | 2 |
5 | 217 | (1번 항목) preempt_disable() 함수를 호출한다. | 2009-10-04 | 2 |
5 | 217 | (217 페이지 4번 항목) preempt_enable() 함수를 호출한다. | 2009-10-05 | 2 |
5 | 217 | (6번 항목) cpu_relax() 매크로는 정지 어셈블리어 명령어로 바뀐다. | 2009-10-05 | 2 |
5 | 218 | (주석 3)) 대부분의 경우(스핀 락이 자유롭다) | 2009-10-06 | 2 |
5 | 218 | (2번째 문단 2번째 줄) 테스트는 기호 플래그에 대해 실시한다. | 2009-10-06 | 2 |
5 | 218 | (218 페이지 4번째 문단) 그리고 preempt_enable() 함수를 호출한다(커널 선점이 지원되지 않는다면 함수는 아무것도 하지 않는다). | 2009-10-06 | 2 |
5 | 219 | (맨아래 문단) spin_lock() 함수와 같은 역할을 한다. | 2009-10-06 | 2 |
5 | 220 | (220 페이지 1번째 문단) 락 필드(읽기/쓰기 락 카운트)는 원자적인 작업에 의해 접근된다. 하지만 전체 함수는 카운트에 대해 원자적으로 동작하지 않는다. 예를 들어 if 문으로 카운터 값을 테스트 한 후 1을 반환하기 전에 카운트 값이 바뀔 수 있다. | 2009-10-06 | 2 |
5 | 220 | (1번째 문단) 사실 함수는 값을 줄이기 전에 카운터가 0이나 음수가 아니면 1을 반환한다. | 2009-10-06 | 2 |
5 | 220 | (마지막 줄) 이후 매크로는 preempt_enable() 함수를 호출한다. | 2009-10-06 | 2 |
5 | 220 | (220 (1번째 문단)) '사실 함수는 값을 줄이기 전에 카운터가 0이나 음수가 아니면 1을 반환한다.'를 | 2011-02-16 | 3 |
5 | 221 | (seqlocks 아래) 비슷한 쓰기 경로는 읽기 경로가 끝낼 때까지 기다려야 한다. | 2009-10-06 | 2 |
5 | 221 | (맨 아래 문단) 리눅스 2.6에서 소개된 Seqlocks는 | 2009-10-06 | 2 |
5 | 222 | (222 페이지 2번째 문단) 첫 번째 함수는 seqlock_t 자료 구조에서 스핀 락을 획득하고 순서 카운터를 1 감소시키며, 두 번째 함수는 순서 카운터를 1 증가시키고 스핀 락을 해지시킨다. | 2009-10-06 | 2 |
5 | 223 | (3번째 문단 1번 항목) 포인터에 의해 동적으로 할당되고 참조되는 유일한 자료 구조는 RCU에 의해 보호될 수 있다. | 2009-10-15 | 2 |
5 | 224 | (2번째 문단 1번째 줄) 콜백 함수를 위한 CPU 리스트에 디스크립터를 추가한다. | 2009-10-15 | 2 |
5 | 227 | (2번째 문단) 하지만 한 CPU에서 동작중인 프로세스들이 세마포어 자료 구조에서 다른 CPU를 위한 필드들을 수정하는 것을 막기 위해 __down() 함수는 대기 큐 스핀 락을 사용한다. | 2009-10-15 | 2 |
5 | 227 | (2번째 문단) __down() 함수는 끝까지 대기 큐 함수의 "_locked" 버전을 사용하는데 | 2009-10-15 | 2 |
5 | 231 | (4번째 문단) local_irq_save와 loca_irq_restore 매크로에 의해 각각 이루어진다. | 2009-10-18 | 2 |
5 | 232 | (3번째 문단) local_bh_disable 매크로는 지역 CPU의 소프트 IRQ에 1을 더하고, local_bh_enable 매크로는 1 뺀다. | 2009-10-18 | 2 |
5 | 232 | (5번째 문단 1번 항목) 하드 IRQ 카운터와 소프트 IRQ를 검사한다. | 2009-10-18 | 2 |
5 | 232 | (232 페이지 5번째 문단 2번 항목) (이장 앞에 나온 "커널 선점" 참고) | 2009-10-18 | 2 |
5 | 233 | (233 페이지 2번째 문단 2번째 항목) (9장의 "시스템 콜 핸들러와 서비스 루틴" 참고) | 2009-10-18 | 2 |
5 | 234 | (3번째 문단) 같은 CPU에서 실행중인 다른 프로세스가 세마포우를 획득하려고 시도할수 있다. | 2009-10-18 | 2 |
5 | 239 | (밑에서 2번째 문단) 대형 커널 락을 가진 프로세스가 선점 당할 때 임계 영역에서 코드를 수행하는 프로세스가 자발적으로 프로세스 전환을 하지 않기 때문에 schedule() 함수가 세마포어를 풀어준다. | 2009-10-18 | 2 |
6 | 243 | (243 페이지 3번째 문단) (뒤에 나오는 "time(), ftime(), gettimeofday() 시스템 콜과 지연 함수"을 참고) | 2009-10-19 | 2 |
6 | 244 | (244 페이지 실시간 시계 4번째 문단) 'Clock' 유닉스 시스템 프로그램을 실행하여 | 2009-10-19 | 2 |
6 | 245 | (4번째 문단) PC에서 tick_sec는 999,848나노초로 초기화된다. | 2009-10-19 | 2 |
6 | 245 | (주석 1) 나누기 연산으로 상위 비트를 날리는 것을 막기 위해 | 2009-10-19 | 2 |
6 | 246 | (CPU 지역 타이머 2번째 문단) 한 번 또는 정기적으로 타이머를 발생시킬 수 있는 장치이다. | 2009-10-20 | 2 |
6 | 246 | (CPU 지역 타이머 3번째 문단 2번째 항목) 지역 API 타이머는 | 2009-10-20 | 2 |
6 | 246 | (CPU 지역 타이머 3번째 문단 3번째 항목) 그리고 1번 또는 2, 4, 8, 16, 32, 64, 128번 버스의 클록 시그널마다 | 2009-10-20 | 2 |
6 | 247 | (247 페이지 고정밀 사건 타이머 1번째 문단) 고정밀 사건 타이머는 인텔과 마이크로소프트과 | 2009-10-20 | 2 |
6 | 247 | (247 페이지 고정밀 사건 타이머 2번째 문단) 일치하면 하드웨어 인터럽트를 증가시킨다. | 2009-10-20 | 2 |
6 | 247 | (고정밀 사건 타이머 3번째 문단) 매번 발생하는 인터럽트를 프로그램 할 수 있게 하고, HPET 레지스터를 지원하는 타이머의 인터럽트를 허용하거나 금지한다. | 2009-10-20 | 2 |
6 | 247 | (ACPI 전원 관리 타이머 2번째 문단) 운영체제나 BIOS가 주파수를 낮추거나 또는 배터리 전력을 아끼기 위해 전력 CPU의 전압을 동적으로 낮춘다면 | 2009-10-20 | 2 |
6 | 249 | (맨 마지막 줄) '지연' 칸을 지연 메소드가 사용하는 타이머를 나타낸다. | 2009-10-30 | 2 |
6 | 250 | (아래에서 2번째 문단) 80x86 아키텍처에서 jiffies가 왜 64비트 unsigned long 정수로 | 2009-10-30 | 2 |
6 | 257 | (1.c 항목) (이 장 뒤에 나올 "The setitimer()와 alarm() 시스템 콜" 참고) | 2009-10-30 | 2 |
6 | 260 | (4번째 문단) 처음에는 현재 jiffies 값에 원하는 틱의 수를 더해서 필드를 계산하지만 필드 값은 바뀌지 않는다. | 2009-10-31 | 2 |
6 | 260 | (5번째 문단) 동적 타이머는 커널을 사용하고, | 2009-10-31 | 2 |
6 | 265 | (3.d.5 항목) 인수 t.data에 전달된 타이머 함수 t.function을 수행한다. | 2009-10-31 | 2 |
6 | 265 | (아래에서 3번째 문단) jiffies와 timer_jiffies는 항상 같기 때문에 | 2009-10-31 | 2 |
6 | 265 | (3.b 항목) 인덱스는 base->timer_jiffies 값의 적당한 비트들을 결정한다. | 2009-10-31 | 2 |
7 | 279 | (SCHED_OTHER 항목) SCHED_OTHER | 2009-11-10 | 2 |
6 | 280 | (280 페이지 공식 (1)) (140-정적우선순위)x20if정적우선순위<120 | 2009-11-10 | 2 |
7 | 280 | (3번째 문단) [표 7-2]는 정적인 우선순위, 기본 타임 퀀텀 값, 최고 정적인 우선순위를 가진 전통 프로세스의 해당 나이스 값, 정적 우선순위 기정치(Default), 최저 정적우선순위들을 보여준다. | 2009-11-10 | 2 |
7 | 280 | (공식 2) 동적 우선순위=max(100, min(정적인 우선순위-보너스+5,139)) | 2009-11-10 | 2 |
7 | 281 | (맨 아래 문단) 공식에서 (정적인 우선순위)/4-28은 '상호 작용 델타(Interactive Delta)'라고 불린다. | 2009-11-10 | 2 |
7 | 281 | (마지막 문단) 반대로 최적 정적인 우선순위(139)를 가진 프로세스는 보너스 값이 상호 작용 델타 6에 도달하기 위하여 11보다 항상 작기 때문에 상호 작용적이라고 여겨지지 않는다. | 2009-11-10 | 2 |
7 | 282 | (282 페이지 활성 프로세스 설명) 실행 가능한 프로세스들은 자신의 타임 퀀텀을 쓰지 않아도 실행될 수 있다. | 2009-11-10 | 2 |
7 | 284 | (표 7-4 curr 필드 설명) 현재 실행 가능한 프로세스의 디스크립터 주소 | 2009-11-10 | 2 |
7 | 284 | (표 7-4 migration_queue 필드 설명) 실행 큐에서 제거될 프로세스의 migration_queue 리스트 | 2009-11-10 | 2 |
7 | 285 | (그림 7-1) 동작중, 만료된, 배열[0], 배열[1] | 2009-11-10 | 2 |
7 | 287 | (3번 항목) 아니면 프로세스는 타임 퀀텀을 모두 소비한 것이다. 하지만 대체되지는 않고 재 스케줄링을 위해 | 2009-11-11 | 2 |
7 | 289 | (2.f 항목) 이미 만료된 프로세의 | 2009-11-11 | 2 |
7 | 290 | (290 페이지 첫번째 문단) TIMESLICE_GRANULARITY 매크로는 시스템 내 CPU의 수만큼의 값을 반환하며 그 값들은 현재 프로세스의 보너스에 비례하는 상수이다. | 2009-11-11 | 2 |
7 | 290 | (290 페이지 1번 항목) CPU의 논리적인 수는 p->thread_info->cpu 필드에 저장된다. | 2009-11-11 | 2 |
7 | 291 | (3번 항목) p->array 필드가 NULL이면, | 2009-11-11 | 2 |
7 | 291 | (2번째 문단) 이러한 과정이 수행된 후 함수는 깨어난 프로세스를 실행할 CPU에서 확인하고, 해당 CPU의 실행 큐 rq에 프로세스를 추가한다. | 2009-11-12 | 2 |
7 | 291 | (1 ~ 5번 항목) * 시작 번호가 1이 아니라 5가 되어야 합니다. | 2009-11-12 | 2 |
7 | 292 | (3번 항목) 프로세스가 커널 스레드인지, | 2009-11-12 | 2 |
7 | 292 | (4번 항목) sleep_time는 프로세스의 평균 수면 시간에 더해질 것이므로(과정 6 참고) 현재 평균 수면 시간이 작을수록 빨리 일어날 것이다. | 2009-11-12 | 2 |
7 | 297 | (5번째 문단) 다음 지역 변수는 | 2009-11-14 | 2 |
7 | 298 | (2번째 문단) 후자의 경우 단지 그 시간의 한 인자를 더한다. | 2009-11-14 | 2 |
7 | 299 | (4번째 문단) mm 필드는 프로세스가 소요한 메모리 디스크립터를 가리킨다. | 2009-11-14 | 2 |
7 | 300 | (4번째 문단) switch_to 매크로는 호출 바로 뒤에 있는 context_switch()와 schedule() 함수의 next 프로세스에 의해 곧 수행되는 것이 아니라 스케줄러가 prev를 선택하였을 때 수행된다. | 2009-11-14 | 2 |
7 | 302 | (케줄링 도메인 아래 2번째 문단) 각 그룹은 스케쥴링 | 2009-11-14 | 2 |
7 | 305 | (305 (7번 항목)) 305 페이지의 | 2011-02-16 | 3 |
7 | 305 | (305 (마지막 문단)) 305페이지의 마지막 줄 | 2011-02-16 | 3 |
7 | 305 | (5번 항목) 두 번째 스핀 락 busiest->lock spin lock을 획득한다. | 2009-11-14 | 2 |
7 | 305 | (5번 항목) this_rq->lock이 먼저 해제되고 CPU 인덱스를 증가시키는 것에 의해 2개의 락이 획득된다. | 2009-11-14 | 2 |
7 | 305 | (7번 항목) move_task() 함수가 | 2009-11-14 | 2 |
7 | 305 | (마지막 문단) 이 플래그가 NEWLY_IDLE로 설정될 수 없다. | 2009-11-14 | 2 |
7 | 306 | (1번째 문단) 함수는 다음과 같은 경우들에 1을 반환한다. | 2009-11-14 | 2 |
7 | 308 | (4번째 문단) sys_sched_getaffinity() 시스템 콜은 | 2009-11-14 | 2 |
7 | 308 | (5번째 문단) 프로세스가 실행 큐 rq1에서 실행 큐 r2로 이동해야 할 때는 | 2009-11-14 | 2 |
8 | 313 | (표 8-1 private 필드 설명) 페이지가 사용하지 않는 것이라면 필드는 버디 시스템을 사용한다 | 2009-11-16 | 2 |
8 | 314 | (마지막 문단) pgdate_list 변수는 | 2009-11-16 | 2 |
8 | 315 | (표 8-3 node_present_pages 필드 설명) (페이지 프레임 내) | 2009-11-16 | 2 |
8 | 317 | (마지막 문단) 예를 들어 페이지 프레임 선형 주소의 마지막 1GB에 직접 매핑 되었다면, 그리고 ISA DMA를 위해 사용되지 않을 예정이라면 | 2009-11-16 | 2 |
5 | 323 | (3번째 문단) 따라서 커널은 __local_bh_disable을 여러 번 겹쳐서 호출할 수 있다. | 2009-10-18 | 2 |
8 | 324 | (상단 kmap() 함수 코드) void * kmap(struct page * page) | 2009-11-18 | 2 |
8 | 325 | (상단 map_new_virtual() 함수 코드) if (!pkmap_count[last_pkmap_nr]) } | 2009-11-18 | 2 |
8 | 329 | (마지막 문단) 리스트의 머리뿐만 아니라 free_area 배열의 k번째 요소도 2^k 페이지들의 여유 블록의 수를 나타내는 nr_free 필드를 갖는다. | 2009-11-18 | 2 |
8 | 329 | (329 페이지 1번째 문단) 나머지 768개 중 처음 512개를 512-페이지-프레임 블록 리스트에, 남은 페이지 프레임 256개를 여유 256-페이지 프레임 블록의 리스트에 넣는다. | 2009-11-18 | 2 |
8 | 330 | (첫 번째 문단) 마침내 2^k 여유 페이지 블록 내 첫 번째 페이지의 디스크립터인 private 필드는 블록의 지수, 즉 숫자 k를 저장한다. | 2009-11-18 | 2 |
8 | 330 | (첫 번째 문단) 필드 덕에 페이지 블록이 해지될 때 커널은 블록의 버디(Buddy, 바로 옆 블록)도 해지되어야 하는지를 판단하고, 해지되어야 한다면 두 블록을 한 개의 2^k+1 페이지 블록으로 합친다. | 2009-11-18 | 2 |
8 | 330 | (마지막 문단) 뒷부분의 2^h 페이지 프레임을 할당하고 앞부분의 2^k-2^h 페이지 프레임을 h부터 k 사이의 인덱스에 있는 free_area 리스트에 할당한다. | 2009-11-18 | 2 |
8 | 331 | (블록 해지 첫번째 문단) __free_pages_ok() 함수는 | 2009-11-18 | 2 |
8 | 331 | (블록 해지 3번째 문단) __rmqueue() 함수는 | 2009-11-18 | 2 |
8 | 333 | (CPU별 페이지 프레임 캐시 첫번째 문단) 이 장 뒤에 나오는 것처럼 커널은 자주 한 묶음의 페이지 프레임을 요청하고 해지시킨다. | 2009-11-18 | 2 |
8 | 333 | (CPU별 페이지 프레임 캐시 첫번째 문단) 각 CPU별 캐시는 지역 CPU가 발생시키는 한 번의 메모리 요청으로 미리 할당된 여러 페이지 프레임을 포함한다. | 2009-11-18 | 2 |
8 | 334 | (2번째 문단) 한 묶음의 페이지 프레임 요청을 처리하기 위해 | 2009-11-18 | 2 |
8 | 337 | (4번 과정) PF_MEMDIE 플래그가 설정된다) | 2009-11-18 | 2 |
8 | 337 | (4번 과정) 메모리 부족에 대비한 페이지 예약을 채울 수 있는 유일한 경우이다. | 2009-11-18 | 2 |
8 | 337 | (4번 과정) 이런 경우 메모리 요청을 한 커널 제어 경로는 결국 페이지 프레임들을 해지시키는 노력을 함으로써 요청했던 것을 얻어야 한다. | 2009-11-18 | 2 |
8 | 337 | (5번 과정) _gfp_mask의 _GFP_WAIT 플래그가 설정되지 않았으면 | 2009-11-18 | 2 |
8 | 338 | (10번 과정) __GFP_NORETRY 플래그가 0이고 메모리 할당이 붙어있는 8개의 페이지 프레임을 요구하거나 | 2009-11-18 | 2 |
8 | 343 | (외부 슬랩 디스크립터 설명) 슬랩 외부에 cache_sizes가 가리키는 | 2009-11-18 | 2 |
8 | 344 | (3번째 문단 마지막 줄) cache_sizes 테이블을 사용한다. | 2009-11-18 | 2 |
8 | 345 | (아래에서 3번째 문단) 슬랩 캐시는 SLAB_RECLAIM_ACCOUNT 플래그 설정으로 만들어지므로 | 2009-11-19 | 2 |
8 | 346 | (2번째 문단) reclaim_slab 필드는 해지된 페이지만이 페이지 프레임 해지 알고리즘에 의해 사용되도록 | 2009-11-19 | 2 |
8 | 346 | (5번째 문단) 이런 일이 일어나면 슬랩 할당자는 kmem_cache_grow()을 호출하여 | 2009-11-19 | 2 |
8 | 346 | (5번째 문단) alloc_slabmgnt()을 호출해서 새로운 슬랩 디스크립터를 받는다. | 2009-11-19 | 2 |
8 | 346 | (마지막 문단) 그래서 cache_ grow() 함수는 | 2009-11-19 | 2 |
8 | 346 | (주석 8)) lru 필드는 또한 페이지 프레임 해지 알고리즘을 사용한다. | 2009-11-19 | 2 |
8 | 347 | (3번째 문단) 마지막으로 cache_ grow() 함수는 | 2009-11-19 | 2 |
8 | 347 | (캐시에서 슬랩 해지하기 첫 번째 항목) "(다음 절 "캐시에서 슬랩 해지하기" 참고)" 부분을 삭제 | 2009-11-19 | 2 |
8 | 349 | (아래에서 3번째 문단) 그렇지 않으면 객체 크기를 L1_CACHE_BYTES의 배수로 반올림 한다. | 2009-11-19 | 2 |
8 | 356 | (주석 10)) kmem_cache_alloc()를 구현하는 __kmem_cache_alloc() 함수를 | 2009-11-19 | 2 |
8 | 357 | (메모리 풀 2번째 문단) 메모리 풀은 앞에 나온 "예약 페이지 프레임 품"에서 설명한 | 2009-11-19 | 2 |
8 | 359 | (그림 8-7) 연속적인 커널 매핑 | 2009-11-19 | 2 |
8 | 362 | (1번째 문단) alloc_page() 함수는 영역의 각 nr_pages 마다 한 번씩 반복해서 호출되며 | 2009-11-19 | 2 |
8 | 365 | (2번 과정) 페이지 디스크립터 배열 area->pages array을 검색하고 | 2009-11-19 | 2 |
8 | 366 | (366 페이지 아래에서 2번째 문단) 이렇게 해도 커널은 마스터 커널 페이지 전역 디렉토리를 뿌리로 하는 페이지 상위 디렉토리, 페이지 중간 디렉토리, 페이지 테이블을 재사용하지 않기 때문에 상관이 없다. | 2009-11-19 | 2 |
9 | 369 | (1번째 문단) kmem_cache _alloc()나 | 2009-11-22 | 2 |
9 | 369 | (3번째 문단) 커널 함수가 동적 메모리를 요청하려면 반드시 정당한 이유가 있어야 하고, 이러한 요청을 더는 뒤로 미룰 수 없어야 한다. | 2009-11-22 | 2 |
9 | 371 | (표 9-2 mm_rb 필드 타입) struct rb_root_t | 2009-11-23 | 2 |
9 | 375 | (표 9-3 vm_mm 필드 타입) struct mm_start * | 2009-11-23 | 2 |
9 | 375 | (표 9-3 vm_rb 필드 타입) struct rb_node_t | 2009-11-23 | 2 |
9 | 377 | (메모리 지역 자료 구조 2번째 문단) 하지만 시스템 관리자는 /proc/vm/max_map_count 파일을 | 2009-11-23 | 2 |
9 | 379 | (4번째 문단) 모든 메모리 구역 객체는 rb_node_t 타입의 vm_rb 필드에 | 2009-11-23 | 2 |
9 | 381 | (5번째 문단) 커널이 PAE를 지원하도록 컴파일 되었다면 | 2009-11-23 | 2 |
9 | 381 | (7번째 문단) 반대로 커널이 PAE를 지원하지 않고 CPU가 NX 플래그를 가진다면 | 2009-11-23 | 2 |
9 | 385 | (2번째 문단) 전형적으로 실행 파일의 text, data, and bss 세그먼트 등이 있다 | 2009-11-23 | 2 |
9 | 386 | (1번째 문단) __vm_unlink() 함수는 | 2009-11-23 | 2 |
9 | 386 | (마지막 줄) (15장 참고) | 2009-11-23 | 2 |
9 | 388 | (첫 줄) 기본 플래그인 mm->dev_flags에서 | 2009-11-23 | 2 |
9 | 388 | (6번 과정) 마지막 검사는 security_vm_enough_Memory() 함수가 수행한다. | 2009-11-23 | 2 |
9 | 389 | (13번 과정) make_pages_present() 함수는 make_pages_present() 함수를 호출한다. | 2009-11-23 | 2 |
9 | 392 | (11.d 과정) 메모리 구역이 익명이면 mm->anon_vma의 선두에 있는 | 2009-11-23 | 2 |
9 | 395 | (코드) if (regs->eflags & 0x00000200) | 2009-11-23 | 2 |
9 | 396 | (2번째 문단 (코드)) if (!(error_code & 0x101)) | 2009-11-23 | 2 |
9 | 400 | (아래에서 2번째 문단) handle_mm_fault()가 0을 반환하면 프로세스에 VM_FAULT_SIGBUS, SIGBUS 시그널을 보낸다. | 2009-11-24 | 2 |
9 | 401 | (중간 코드) out_of_Memory: | 2009-11-24 | 2 |
9 | 404 | (3번째 문단) 15장에 있는 "메모리 매핑의 요구 페이징"과 | 2009-11-24 | 2 |
9 | 404 | (코드) If (write_access) { | 2009-11-24 | 2 |
9 | 407 | (2번째 코드 맨 아래) kunmap_atomic(vto, KM_USER0); | 2009-11-24 | 2 |
9 | 408 | (3번째 문단) 자세한 설명은 16장을 참고하라. | 2009-11-24 | 2 |
9 | 409 | (3번째 문단) no_content 라벨이 가리키는 | 2009-11-24 | 2 |
10 | 417 | (10장. 417p. [그림10-1] 내부) 오른쪽 사각형의 '사용자 모드'를 '커널 모드'로 수정함. | 2010-12-27 | 3 |
10 | 420 | ("시스템 콜에서 빠져나오기" 첫번째 문단) 다음으로 시스템 콜 핸들러를 마치는 ret_from_sys_call()로 넘어간다(4장의 "ret_from_sys_call() 함수" 참고) | 2009-11-25 | 2 |
10 | 420 | (아래에서 2번째 문단) [표 4-15]에 열거된 TIF_POLLING_NRFLAG를 제외한 | 2009-11-25 | 2 |
10 | 420 | (마지막 줄) TIF_SYSCALL_TRACE 플래그가 설정되었다면 함수는 work_pending 라벨로 넘어간다. | 2009-11-25 | 2 |
10 | 424 | ("시스템 콜에서 빠져 나오기" 2번째 문단) resume_userspace 또는 work_pending labels 라벨로 넘어간다 | 2009-11-26 | 2 |
10 | 435 | (중간 코드) cmpl $-125, %eax | 2009-11-26 | 2 |
11 | 439 | (마지막 문단) 커널은(시그널을 수신한 | 2009-11-27 | 2 |
11 | 440 | (아래에서 2번째 문단 2번째 항목) 대략 1밀초 간격으로 발생하는 타이머 인터럽트가 있으면 | 2009-11-27 | 2 |
11 | 443 | (그림 11-1) 시그널 디스크립 | 2009-11-27 | 2 |
11 | 448 | (맨 아래 signal_pending(p) 설명) 이 함수는 프로세스 디스크립터의 sigpending 필드를 검사함으로써 간단하게 구현한다. | 2009-11-27 | 2 |
11 | 449 | (맨 위) recalc_sigpending(t)과 reclac_sigpending() | 2009-11-27 | 2 |
11 | 450 | (450 페이지 1번 과정 첫번째 항목) (t->ptrace의 PT_PTRACED 플래그를 지운다). | 2009-11-27 | 2 |
11 | 451 | (위 2번 과정) (sigismember(&t->pending.signal,sig) returns 1). | 2009-11-27 | 2 |
11 | 451 | ("send_signal() 함수" 첫번째 문단) siginfo_t data 자료 구조의 주소 info | 2009-11-27 | 2 |
11 | 451 | ("send_signal() 함수" 첫번째 문단) (또는 특별한 코드인 경우 앞 절의 specific_send_sig_info()의 디스크립터를 참고), | 2009-11-27 | 2 |
11 | 454 | (454 페이지 8번 과정) 같은 값을 반환하는 동안에 종료한다. | 2009-11-27 | 2 |
11 | 459 | (3번째 문단) 현재 프로세스의 사용자 모드 스택으로 복사하는 방법을 해결한다. | 2009-11-27 | 2 |
11 | 464 | (표 11-11) ERESTART_RESTARTBOLCKa | 2009-11-27 | 2 |
11 | 464 | (표 11-11) ERESTARTHAND | 2009-11-27 | 2 |
11 | 465 | (4번째 문단) 프로세스는 20 밀리 초 동안 수행을 중지하고 시그널이 10밀리 초 후에 발생하도록 nanosleep()을 호출한다고 가정하자. | 2009-11-27 | 2 |
11 | 468 | ("시그널 동작 변경" 2번째 문단) sigaction 타입 테이블 act이다. | 2009-11-27 | 2 |
11 | 472 | (2번째 항목) rt_sigtimewait() | 2009-11-27 | 2 |
12 | 487 | (표 12-4 f_maxcount 필드 설명) (현재 231-1 로 설정된다) | 2009-11-30 | 2 |
12 | 511 | (표 12-15 mnt 필드 타입) struct vfs_mount * | 2009-12-01 | 2 |
12 | 512 | (1.a 과정) LAST_ROOT에 last_type 필드 값을 설정한다. | 2009-12-01 | 2 |
12 | 514 | (g.3 과정) nd->mnt filesystem의 루트 디렉토리이고 | 2009-12-02 | 2 |
12 | 514 | (h 과정) d_hash dentry 메소드를 가진다면 | 2009-12-02 | 2 |
12 | 514 | (j 과정) real_lookup() 함수는 아이노드의 탐색 메소드를 수행하여 | 2009-12-02 | 2 |
12 | 515 | (k 과정) follow_ mount() 함수는 | 2009-12-02 | 2 |
12 | 515 | (m 과정) (next.dentry->d_inode가 탐색 메소드를 가진다) | 2009-12-02 | 2 |
12 | 515 | (n 과정) nd->dentry를 next.dentry에, 그리고 nd->mnt를 next.mnt에 각각 설정하고 | 2009-12-02 | 2 |
12 | 515 | (6번 과정) 이제 원래 경로명에서 마지막을 제외한 모든 구성 요소를 해석한다. | 2009-12-02 | 2 |
12 | 516 | (17번 과정) inode가 독자적인 탐색 메소드를 가지는지, | 2009-12-02 | 2 |
12 | 519 | (4번 과정) current->link_count와 current->total_link_count를 | 2009-12-02 | 2 |
12 | 519 | (7번 과정) __vfs_follow_ link() 함수를 호출한다. | 2009-12-02 | 2 |
12 | 519 | (9번 과정) nd->depth 필드를 감소시킨다. | 2009-12-02 | 2 |
12 | 523 | (sys_read/write 1번 과정) 파일 객체의 주소 file을 얻고, 사용 카운터 file->f_count를 증가시킨다 | 2009-12-02 | 2 |
12 | 523 | ("close() 시스템 콜" 2번 과정) close_ on_exec 필드에서 삭제하여 | 2009-12-02 | 2 |
12 | 525 | (중간) flock() 시그널 콜에 의한 방법으로... | 2009-12-02 | 2 |
12 | 525 | (아래에서 3번째 문단) fcntl()과 the flock() 시스템 콜이 | 2009-12-02 | 2 |
12 | 526 | (아래에서 2번째 문단) 모든 lock_file 자료 구조는... | 2009-12-02 | 2 |
12 | 527 | (2번째 문단) * 아래의 내용이 맨 뒤에 추가되어야 합니다. | 2009-12-02 | 2 |
12 | 527 | ("FL_LOCK 락" 제목 및 첫번째 문단) FL_LOCK | 2009-12-02 | 2 |
12 | 528 | (6번 과정) flock_ lock_file_wait() 함수를 호출하여 | 2009-12-02 | 2 |
12 | 530 | (3번째 문단) (F_GETBLK 명령인 경우) | 2009-12-02 | 2 |
13 | 536 | (2번째 문단) 커널은 '리소드(Resource)'을 사용하여 | 2009-12-05 | 2 |
13 | 538 | (중간 "범용 입출력 인터페이스") * 앞 페이지의 "전용 입출력 인터페이스"와 마찬가지로 소제목으로 변경 | 2009-12-05 | 2 |
13 | 544 | (3번째 문단) 케이오브젝트 디렉토리는 'attributes'라는 정규 파일을 가진다. | 2009-12-05 | 2 |
13 | 556 | (코드) (foo_dev->intr= =1) | 2009-12-05 | 2 |
13 | 562 | (5번째 문단) 그리고 드라이버는 pci_map_single() 또는 the dma_map_single() 함수를 호출하여 | 2009-12-05 | 2 |
13 | 568 | (아래 6번 과정) cdev 디스크립터의 open 필드의 내용으로 | 2009-12-05 | 2 |
14 | 573 | (첫 번째 문단) 18장에서는 일부 전형적인 디스크 기반을 소개할 것이다. | 2009-12-06 | 2 |
14 | 574 | (첫 번째 문단) 6개의 512 바이트 섹터로 이루어져 있다. | 2009-12-06 | 2 |
14 | 577 | (표 14-1 bi_vcnt 필드 설명) bio의 bio_vec 배열에서 세그먼트의 번호 | 2009-12-06 | 2 |
14 | 578 | (표 14-1 bi_max_vecs 필드 설명) bio의 bio_vecarray 내에서 세그먼트의 최대 허용 수 | 2009-12-06 | 2 |
14 | 578 | (578 페이지 아래에서 2번째 문단) bios | 2009-12-06 | 2 |
14 | 580 | (마지막 문단) (부팅 과정에서, 또는 제거할 매체가 드라이버에 삽입 되었을 때, | 2009-12-06 | 2 |
14 | 581 | (1번 과정) bio->bi_sector가 블록 장치의 섹터 수를 초과하지 않으면 | 2009-12-06 | 2 |
15 | 610 | (610 (표 15-1 private_lock 필드 설명)) 표 15-1의 spinlock_k를 설명하는 줄의 | 2011-02-16 | 3 |
15 | 610 | (표 15-1 i_mmap_writable 필드 설명) 주소 공간 내 공유 메모리 매핑들의 번호 | 2009-12-07 | 2 |
15 | 610 | (표 15-1 private_lock 필드 설명) 일반적으로 private_list list를 관리할 때 | 2009-12-07 | 2 |
15 | 611 | (표 15-2) writepags | 2009-12-07 | 2 |
15 | 615 | (3.a 과정) radix_tree_preloadsd에 있는 이미 할당된 자료 구조에서 시도한다. | 2009-12-07 | 2 |
15 | 616 | (중간 4번 과정) 캐시 페이지의 the page->mapping->nrpages | 2009-12-07 | 2 |
15 | 622 | (첫 번째 문단) 버퍼 헤드는 b_page 필드 내 버퍼 페이지 디스크립터의 주소를 저장한다. | 2009-12-07 | 2 |
15 | 623 | (첫 번째 문단) 버퍼 헤드의 private 필드는 | 2009-12-07 | 2 |
15 | 623 | (4번 과정) (다시 카운터는 find_or_create_page()를 증가시킨다) | 2009-12-07 | 2 |
15 | 624 | (마지막 문단) 블록 장치 디스크립터 주소 bdev 또는 논리 블록 번호 nr이 | 2009-12-07 | 2 |
15 | 626 | (중간 3번 과정) free_more_Memory() 함수를 호출하여 | 2009-12-08 | 2 |
15 | 630 | (2번째 문단) 리눅스 2.6에서는 이 둘을 bdflush라는 | 2009-12-08 | 2 |
15 | 630 | (중간 2번째 항목) 현재(마지막 초에) pdflush가 없다면 | 2009-12-08 | 2 |
15 | 632 | (위 3번째 항목) free_more_Memory() 또는try_to_free_pagess() 함수를 | 2009-12-08 | 2 |
15 | 633 | (633 페이지 첫번째 문단) 디스크에 쓰여질 페이지의 최소수를 매개 변수로 받는다. | 2009-12-08 | 2 |
15 | 633 | (역자주) bdflush 커널 스레드가 | 2009-12-08 | 2 |
15 | 634 | (마지막 문단) dirty_writeback_centisecs 수백 초 (...) 후에 | 2009-12-08 | 2 |
15 | 635 | (5번 과정) dirty_writeback_centisecs 변수에 저장된 수백 초 후 | 2009-12-08 | 2 |