목차part 1
1장 서론 2 1.1 시스템 프로그램이란 무엇인가? 2 1.2 시스템 프로그램의 분류 3 1.2.1 언어 프로세서 / 3 1.2.2 운영체제 / 4 1.2.3 그 밖의 시스템 프로그램 / 5 1.3 책의 구성 6 1.4 책의 계통도 8
2장 UNIX 시스템 환경 11 2.1 초기 UNIX 시스템의 발전과 계보 11 2.2 UNIX 시스템의 구조와 특징 14 2.2.1 UNIX 시스템의 구조 / 14 2.2.2 UNIX 시스템의 특징 / 16 2.3 UNIX 시스템의 쉘 명령어 20 2.3.1 UNIX 세션 / 20 2.3.2 우편 / 23 2.3.3 매뉴얼 / 23 2.3.4 화일 관련 명령어 / 24 2.3.5 디렉토리 / 33 2.3.6 쉘 / 36 ⅴ2.4 쉘(Shell) 프로그래밍 46 2.5 요약 49
3장 표준 입출력을 이용한 C 프로그래밍 53 3.1 표준입력과 표준출력:show 53 3.2 프로그램의 인수:show의 버전 2 57 3.3 화일의 사용:show의 버전 3 58 3.4 페이지 단위 출력 프로그램 p 버전 1 63 3.5 페이지 단위 출력 프로그램 p 버전 2:페이지길이 선택사항 이용하기 67 3.6 이름으로 프로세스 죽이기 kp 68 3.7 기타 표준 I/O 71 3.7.1 버퍼링(buffering) / 72 3.7.2 이진 I/O / 73 3.7.3 개방된 화일의 특정 위치로 가기 / 74 3.7.4 임시 화일 / 74
Part 2
4장 UNIX 시스템 호출 78 4.1 저수준 I/O 78 4.1.1 화일 기술자(File descriptors) / 78 4.1.2 화일 입출력 - read와 write / 80 4.1.3 화일의 생성: open, creat, close, unlink / 84 4.1.4 임의 접근:lseek / 89 4.2 디렉토리(directory)의 처리 90 4.3 i-node(또는 inode) 92 4.4 프로세스 98 4.4.1 다른 프로그램으로의 변경:execlp와 execvp / 98 4.4.2 프로세스의 생성, 프로세스의 종료 기다리기:fork와 waitpid / 102 4.5 시그널 112 ⅵ4.6 비상탈출 기능 117
5장 프로그램의 개발 123 5.1 문맥자유문법(CFG)과 문맥민감문법(CSG) 123 5.2 가감승제 계산기 calc1 126 5.2.1 calc1의 문법 / 126 5.2.2 스캐너 yylex()의 작성 / 127 5.2.3 yacc의 입력함수의 작성 / 129 5.2.4 makefile을 이용한 컴파일 / 135 5.3 변수와 에러회복 능력을 갖춘 계산기 calc2 136 5.3.1 calc2.y의 구현 / 136 5.3.2 calc2의 동작 / 141 5.4 임의의 변수 명이 가능한 가감승제 계산기 calc3 143 5.4.1 헤더 file의 작성 / 143 5.4.2 심볼 테이블의 관리 / 144 5.4.3 calc3.y 의 작성 / 146 5.4.4 makefile을 이용한 calc3의 제작 / 151 5.5 가감승제 계산기 calc의 개선된 구현법:심볼 테이블 제작과 스캐너의 자동제작 152 5.5.1 심볼 테이블의 제작 / 152 5.5.2 스캐너의 자동 제작:lex의 사용법 / 159 5.5.3 최종 calc 프로그램의 작성 / 163 5.6 lex만을 이용한 프로그램 165 5.7 돌아보며 167
6장 기타 UNIX 시스템 호출 173 6.1 화일 I/O 173 6.1.1 /dev/fd의 사용 / 173 6.1.2 fcntl 함수 / 174 6.1.3 ioctl 함수 / 177 6.2 화일과 디렉토리 178 6.2.1 화일 접근 권한 / 178 6.2.2 set-user-ID와 set-group-ID / 179 6.2.3 access 함수 / 180 ⅶ6.2.4 umask 함수 / 181 6.2.5 chmod 함수 / 183 6.2.6 chown 함수 / 184 6.2.7 화일의 절단 : truncate / 185 6.2.8 화일시스템 / 185 6.2.9 링크와 심볼식 링크 / 187 6.2.10 chdir과 getcwd 함수 / 189 6.2.11 sync 함수 / 190 6.3 시스템 자료의 처리 190 6.3.1 패스워드 화일 / 191 6.3.2 그룹 화일 / 193 6.3.3 시스템 확인 / 194 6.3.4 시간과 날짜 / 195 6.3.5 기타 자료 화일들 / 196 6.4 프로세스 환경 197 6.4.1 main 함수 / 197 6.4.2 프로세스의 종료 / 198 6.4.3 C 프로그램의 메모리 배치 / 200 6.4.4 환경 변수 / 203 6.4.5 동적 메모리 배정:배열크기의 동적 변경 방법 / 205 6.4.6 setjmp와 longjmp / 207 6.5 시그널 210 6.5.1 기본적인 시그널 사용법 / 210 6.5.2 신뢰할 수 없는 시그널(Unreliable Signals) / 212 6.5.3 느린 시스템 호출(Slow System Calls) / 214 6.5.4 재진입 함수(Reentrant Functions) / 215 6.5.5 alarm과 sleep / 216 6.5.6 믿을 수 있는 시그널 / 218 6.5.7 추가적인 시그널 함수들 / 221 6.5.8 시그널 금지 영역의 해제 / 223 6.5.9 작업 제어 시그널 / 225 6.6 레코드 록킹(Record Locking) 226 6.6.1 fcntl 함수를 이용한 레코드 록킹 / 226 ⅷ6.6.2 충고식 록킹(Advisory locking)과 강제식 록킹(Mandatory Locking) 229 6.7 경주 조건(Race Conditions) / 230 6.8 I/O 멀티플렉싱(Multuplexing) / 233 6.9 메모리 사상 I/O(Memory Mapped I/O) 237 6.9.1 가상 메모리 / 237 6.9.2 mmap 함수 / 238 6.10 다중 쓰레딩(Multi-Threading) 242 6.10.1 쓰레드 사용법 / 242 6.10.2 다중 쓰레딩 환경에서 임계영역 문제 / 245
7장 프로세스 간의 통신(IPC) : 소켓 이용법 251 7.1 인터넷 모델과 계층 251 7.2 인터넷 주소 252 7.3 데이터그램 통신기법 256 7.3.1 데이터그램을 이용한 수신용 서버 프로그램 / 257 7.3.2 socket, bind, getsockname / 258 7.3.3 데이터그램을 이용한 송신용 클라이언트 프로그램 / 260 7.3.4 gethostbyname, bcopy, sendto / 261 7.4 스트림 통신기법 263 7.4.1 스트림 서버 버전 1 / 265 7.4.2 listen, accept, connect / 268 7.4.3 고객 프로그램 stclient / 269 7.4.4 스트림 서버의 개선 : 버전 2 / 271 7.4.5 select / 274 7.4.6 스트림 서버 버전 3 : 요청처리마다 새로운 아들 프로세스가 처리하는 버전 / 276 7.4.7 fork, waitpid / 279
Part 3
8장 어셈블리 언어와 어셈블러 284 8.1 시스템/370의 구조 284 ⅸ8.1.1 개요 / 285 8.1.2 바이트, 반 단어, 단어 및 2배 단어 / 287 8.1.3 명령어 이해를 위한 기본 사항 / 288 8.2 명령어의 포맷 289 8.2.1 RR 포맷 (레지스터-레지스터 포맷) / 290 8.2.2 RX 포맷 (레지스터-인덱스를 가진 기억장치 포맷) / 292 8.2.3 RS 포맷 (레지스터-기억장치 포맷) / 294 8.2.4 SI 포맷 (기억장치-즉시 포맷) / 295 8.2.5 SS 포맷 (기억장치-기억장치 포맷) / 296 8.3 분기 명령어 (Branch Instruction) 300 8.3.1 BC 및 BCR 명령어 / 300 8.3.2 BAL 및 BALR 명령어 / 301 8.4 예제 프로그램 및 그 이해 303 8.4.1 예제 프로그램 / 303 8.4.2 기계 연산과 의사 연산 / 304 8.4.3 인덱스 레지스터의 용도 : 순수 코드 / 305 8.4.4 리터럴(Literal)의 이용 / 306 8.5 어셈블러의 출력 형태 307 8.6 어셈블러가 사용하는 테이블 309 8.6.1 미리 준비된 테이블 : 기계연산 테이블과 의사연산 테이블 / 309 8.6.2 심볼 테이블과 리터럴 테이블 / 311 8.6.3 기준 테이블 / 311 8.7 어셈블러의 제작 313 8.8 기타 숙고할 사항 316 8.8.1 DC 및 DS 의 길이 표시에 심볼 사용 / 316 8.8.2 백-패칭 기법과 1-패스 어셈블러 / 319 8.9 단축 370 어셈블리 320 8.9.1 기계 연산(Machine Op) / 320 8.9.2 의사 연산(Pseudo-Op) / 322 8.9.3 단축 370 프로그램의 시뮬레이션 / 323\
9장 연결 및 적재(Linking and Loading) 333 ⅹ9.1 서론 333 9.2 적재기 (또는 로더; loader) 및 연결기 (linker) 334 9.2.1 적재기 / 334 9.2.2 연결기(linker) / 336 9.3 연결 편집기 (linkage editor) 339 9.3.1 객체 모듈 (object module) / 339 9.3.2 적재모듈 (load module) / 349 9.3.3 주소의 배정 및 주소 상수의 재배치 / 351 9.3.4 연결의 예제 / 353 9.3.5 연결 편집기의 다른 기능 / 354 9.3.6 단축 370 어셈블리용 연결기와의 비교 / 357 9.4 모듈 적재기(module loader) 358 9.4.1 모듈적재기의 동작 방식 / 358 9.4.2 예제를 통해 본 적재 과정 / 359 9.5 결론 361
10장 매크로 프로세서 367 10.1 매크로 프로세서의 개념 367 10.2 M6 매크로 프로세서 370 10.2.1 M6에서의 매크로 처리 / 372 10.2.2 M6의 구현 / 376 10.2.3 M6의 고급 기능 / 394 10.3 프로그래밍 프로젝트 401 10.3.1 기본 사양 / 401 10.3.2 주의사항 / 401 10.3.3 구현 / 402 10.3.4 추가 기능 / 402
부록 A UNIX 사용법 407 부록 B UNIX 에디터 vi의 사용법: 화일 prog1.c라 가정 410 xi 부록 C ftp(file transfer protocol) 찾아보기
|
시스템 프로그래밍 - 응용 및 이론
지은이 : 이기철
ISBN : 89-353-0402-6
금액 : 17,000원
● 페이지 : 440페이지
● 판매처 : 절판
● 강의자료 제공
책 소개
책 소개
시스템 프로그래밍 입문서. 이 책은 UNIX/LINUX 쉘 사용법과 C언어의 기초적인 설명부터 시작한다. 네트워크 관련 시스템 호출과 다중 쓰레딩 환경에서의 코딩법, 어셈블러, 연결과 적재, M6 매크로 프로세서 등의 제작 방법도 다루고 있다.저자소개
목차
part 11장 서론 2
1.1 시스템 프로그램이란 무엇인가? 2
1.2 시스템 프로그램의 분류 3
1.2.1 언어 프로세서 / 3
1.2.2 운영체제 / 4
1.2.3 그 밖의 시스템 프로그램 / 5
1.3 책의 구성 6
1.4 책의 계통도 8
2장 UNIX 시스템 환경 11
2.1 초기 UNIX 시스템의 발전과 계보 11
2.2 UNIX 시스템의 구조와 특징 14
2.2.1 UNIX 시스템의 구조 / 14
2.2.2 UNIX 시스템의 특징 / 16
2.3 UNIX 시스템의 쉘 명령어 20
2.3.1 UNIX 세션 / 20
2.3.2 우편 / 23
2.3.3 매뉴얼 / 23
2.3.4 화일 관련 명령어 / 24
2.3.5 디렉토리 / 33
2.3.6 쉘 / 36
ⅴ2.4 쉘(Shell) 프로그래밍 46
2.5 요약 49
3장 표준 입출력을 이용한 C 프로그래밍 53
3.1 표준입력과 표준출력:show 53
3.2 프로그램의 인수:show의 버전 2 57
3.3 화일의 사용:show의 버전 3 58
3.4 페이지 단위 출력 프로그램 p 버전 1 63
3.5 페이지 단위 출력 프로그램 p 버전 2:페이지길이 선택사항 이용하기 67
3.6 이름으로 프로세스 죽이기 kp 68
3.7 기타 표준 I/O 71
3.7.1 버퍼링(buffering) / 72
3.7.2 이진 I/O / 73
3.7.3 개방된 화일의 특정 위치로 가기 / 74
3.7.4 임시 화일 / 74
Part 2
4장 UNIX 시스템 호출 78
4.1 저수준 I/O 78
4.1.1 화일 기술자(File descriptors) / 78
4.1.2 화일 입출력 - read와 write / 80
4.1.3 화일의 생성: open, creat, close, unlink / 84
4.1.4 임의 접근:lseek / 89
4.2 디렉토리(directory)의 처리 90
4.3 i-node(또는 inode) 92
4.4 프로세스 98
4.4.1 다른 프로그램으로의 변경:execlp와 execvp / 98
4.4.2 프로세스의 생성, 프로세스의 종료 기다리기:fork와 waitpid / 102
4.5 시그널 112
ⅵ4.6 비상탈출 기능 117
5장 프로그램의 개발 123
5.1 문맥자유문법(CFG)과 문맥민감문법(CSG) 123
5.2 가감승제 계산기 calc1 126
5.2.1 calc1의 문법 / 126
5.2.2 스캐너 yylex()의 작성 / 127
5.2.3 yacc의 입력함수의 작성 / 129
5.2.4 makefile을 이용한 컴파일 / 135
5.3 변수와 에러회복 능력을 갖춘 계산기 calc2 136
5.3.1 calc2.y의 구현 / 136
5.3.2 calc2의 동작 / 141
5.4 임의의 변수 명이 가능한 가감승제 계산기 calc3 143
5.4.1 헤더 file의 작성 / 143
5.4.2 심볼 테이블의 관리 / 144
5.4.3 calc3.y 의 작성 / 146
5.4.4 makefile을 이용한 calc3의 제작 / 151
5.5 가감승제 계산기 calc의 개선된 구현법:심볼 테이블 제작과 스캐너의 자동제작 152
5.5.1 심볼 테이블의 제작 / 152
5.5.2 스캐너의 자동 제작:lex의 사용법 / 159
5.5.3 최종 calc 프로그램의 작성 / 163
5.6 lex만을 이용한 프로그램 165
5.7 돌아보며 167
6장 기타 UNIX 시스템 호출 173
6.1 화일 I/O 173
6.1.1 /dev/fd의 사용 / 173
6.1.2 fcntl 함수 / 174
6.1.3 ioctl 함수 / 177
6.2 화일과 디렉토리 178
6.2.1 화일 접근 권한 / 178
6.2.2 set-user-ID와 set-group-ID / 179
6.2.3 access 함수 / 180
ⅶ6.2.4 umask 함수 / 181
6.2.5 chmod 함수 / 183
6.2.6 chown 함수 / 184
6.2.7 화일의 절단 : truncate / 185
6.2.8 화일시스템 / 185
6.2.9 링크와 심볼식 링크 / 187
6.2.10 chdir과 getcwd 함수 / 189
6.2.11 sync 함수 / 190
6.3 시스템 자료의 처리 190
6.3.1 패스워드 화일 / 191
6.3.2 그룹 화일 / 193
6.3.3 시스템 확인 / 194
6.3.4 시간과 날짜 / 195
6.3.5 기타 자료 화일들 / 196
6.4 프로세스 환경 197
6.4.1 main 함수 / 197
6.4.2 프로세스의 종료 / 198
6.4.3 C 프로그램의 메모리 배치 / 200
6.4.4 환경 변수 / 203
6.4.5 동적 메모리 배정:배열크기의 동적 변경 방법 / 205
6.4.6 setjmp와 longjmp / 207
6.5 시그널 210
6.5.1 기본적인 시그널 사용법 / 210
6.5.2 신뢰할 수 없는 시그널(Unreliable Signals) / 212
6.5.3 느린 시스템 호출(Slow System Calls) / 214
6.5.4 재진입 함수(Reentrant Functions) / 215
6.5.5 alarm과 sleep / 216
6.5.6 믿을 수 있는 시그널 / 218
6.5.7 추가적인 시그널 함수들 / 221
6.5.8 시그널 금지 영역의 해제 / 223
6.5.9 작업 제어 시그널 / 225
6.6 레코드 록킹(Record Locking) 226
6.6.1 fcntl 함수를 이용한 레코드 록킹 / 226
ⅷ6.6.2 충고식 록킹(Advisory locking)과 강제식 록킹(Mandatory Locking) 229
6.7 경주 조건(Race Conditions) / 230
6.8 I/O 멀티플렉싱(Multuplexing) / 233
6.9 메모리 사상 I/O(Memory Mapped I/O) 237
6.9.1 가상 메모리 / 237
6.9.2 mmap 함수 / 238
6.10 다중 쓰레딩(Multi-Threading) 242
6.10.1 쓰레드 사용법 / 242
6.10.2 다중 쓰레딩 환경에서 임계영역 문제 / 245
7장 프로세스 간의 통신(IPC) : 소켓 이용법 251
7.1 인터넷 모델과 계층 251
7.2 인터넷 주소 252
7.3 데이터그램 통신기법 256
7.3.1 데이터그램을 이용한 수신용 서버 프로그램 / 257
7.3.2 socket, bind, getsockname / 258
7.3.3 데이터그램을 이용한 송신용 클라이언트 프로그램 / 260
7.3.4 gethostbyname, bcopy, sendto / 261
7.4 스트림 통신기법 263
7.4.1 스트림 서버 버전 1 / 265
7.4.2 listen, accept, connect / 268
7.4.3 고객 프로그램 stclient / 269
7.4.4 스트림 서버의 개선 : 버전 2 / 271
7.4.5 select / 274
7.4.6 스트림 서버 버전 3 : 요청처리마다 새로운 아들 프로세스가 처리하는 버전 / 276
7.4.7 fork, waitpid / 279
Part 3
8장 어셈블리 언어와 어셈블러 284
8.1 시스템/370의 구조 284
ⅸ8.1.1 개요 / 285
8.1.2 바이트, 반 단어, 단어 및 2배 단어 / 287
8.1.3 명령어 이해를 위한 기본 사항 / 288
8.2 명령어의 포맷 289
8.2.1 RR 포맷 (레지스터-레지스터 포맷) / 290
8.2.2 RX 포맷 (레지스터-인덱스를 가진 기억장치 포맷) / 292
8.2.3 RS 포맷 (레지스터-기억장치 포맷) / 294
8.2.4 SI 포맷 (기억장치-즉시 포맷) / 295
8.2.5 SS 포맷 (기억장치-기억장치 포맷) / 296
8.3 분기 명령어 (Branch Instruction) 300
8.3.1 BC 및 BCR 명령어 / 300
8.3.2 BAL 및 BALR 명령어 / 301
8.4 예제 프로그램 및 그 이해 303
8.4.1 예제 프로그램 / 303
8.4.2 기계 연산과 의사 연산 / 304
8.4.3 인덱스 레지스터의 용도 : 순수 코드 / 305
8.4.4 리터럴(Literal)의 이용 / 306
8.5 어셈블러의 출력 형태 307
8.6 어셈블러가 사용하는 테이블 309
8.6.1 미리 준비된 테이블 : 기계연산 테이블과 의사연산 테이블 / 309
8.6.2 심볼 테이블과 리터럴 테이블 / 311
8.6.3 기준 테이블 / 311
8.7 어셈블러의 제작 313
8.8 기타 숙고할 사항 316
8.8.1 DC 및 DS 의 길이 표시에 심볼 사용 / 316
8.8.2 백-패칭 기법과 1-패스 어셈블러 / 319
8.9 단축 370 어셈블리 320
8.9.1 기계 연산(Machine Op) / 320
8.9.2 의사 연산(Pseudo-Op) / 322
8.9.3 단축 370 프로그램의 시뮬레이션 / 323\
9장 연결 및 적재(Linking and Loading) 333
ⅹ9.1 서론 333
9.2 적재기 (또는 로더; loader) 및 연결기 (linker) 334
9.2.1 적재기 / 334
9.2.2 연결기(linker) / 336
9.3 연결 편집기 (linkage editor) 339
9.3.1 객체 모듈 (object module) / 339
9.3.2 적재모듈 (load module) / 349
9.3.3 주소의 배정 및 주소 상수의 재배치 / 351
9.3.4 연결의 예제 / 353
9.3.5 연결 편집기의 다른 기능 / 354
9.3.6 단축 370 어셈블리용 연결기와의 비교 / 357
9.4 모듈 적재기(module loader) 358
9.4.1 모듈적재기의 동작 방식 / 358
9.4.2 예제를 통해 본 적재 과정 / 359
9.5 결론 361
10장 매크로 프로세서 367
10.1 매크로 프로세서의 개념 367
10.2 M6 매크로 프로세서 370
10.2.1 M6에서의 매크로 처리 / 372
10.2.2 M6의 구현 / 376
10.2.3 M6의 고급 기능 / 394
10.3 프로그래밍 프로젝트 401
10.3.1 기본 사양 / 401
10.3.2 주의사항 / 401
10.3.3 구현 / 402
10.3.4 추가 기능 / 402
부록 A UNIX 사용법 407
부록 B UNIX 에디터 vi의 사용법: 화일 prog1.c라 가정 410
xi 부록 C ftp(file transfer protocol)
찾아보기