기술 정리/리눅스시스템프로그래밍 5

11장. 시간

경과시간 측정방법 실제시간 - 현실에서 사용하는 진짜 시간과 날짜프로세스 시간 - 프로세서에서 프로세스를 실행하는 데 소비한 시간모노티닉 시간 - 시동 직후부터 경과한 시스템 가동 시간. 반드시 일정하게 증가함 시간 표현 방법 상대시간 - 현재 시각과 같이 특정 기준점에 대한 상대값으로 표현. 절대시간 - 특정 기준점 없이 절대값으로 표현. 유닉스 시스템은 1970년 1월 1일 기준으로 절대시간 표현 기타 정보유닉스 시간은 1970년 1월 1일 00:00:00 UTC가 기준임UTC(Universal Time Coordinate) - GMT(Greenwith Mean Time) 또는 줄루(Zulu) 시라고도 함타이머 한 주기가 지나면 커널은 경과시간을 틱이나 지피(Jiffy)라는 한 단위만큼 늘림시스템의 ..

리눅스 시스템 프로그래밍 - 7장, 8장

CHAPTER7 스레딩 7.1 바이너리, 프로세스, 스레딩 스레드는 운영체제의 프로세스 스케줄러에 의해 스케줄링될 수 있는 최소한의 실행 단위를 뜻한다.최신 운영체제는 가상 메모리와 가상 프로세서라는 두가지 추상 개념을 제공한다.가상메모리는 스레드가 아니라 프로세스와 관련이 있다. 즉 각 프로세스는 메모리에 대한 하나의 유일한 뷰를 갖지만 한 프로세스 내의 모든 스레드는 메모리를 서로 공유한다. 반면에 가상 프로세서는 스레드와 관련이 있다. 7.2 멀티스레딩 멀티스레딩의 장점프로그램 추상화 - 작업을 나누고 각각 실행 단위로 할당하는 것병렬성 - 멀티 프로세서에서 효과적으로 병렬 처리응답속도 향상 입출력블록컨텍스트 스위칭 - 프로세스 단위 보다는 저렴메모리 절약 - 메모리 공유로 인한 메모리 절약 멀티스..

리눅스 시스템 프로그래밍 - 5장, 6장

CHAPTER 5 프로세스 관리 5.1 프로그램, 프로세스, 스레드 프로그램 - 바이너리는 실행할 수 있는 코드를 말하는데, 흔히 프로그램이라고도 함프로세스 - 실행 중인 프로그램스레드 - 프로세스 내 실행 단위. 프로세스는 하나 이상의 스레드를 포함하고 있음 5.2 프로세스 ID 프로세스의 유일한 식별자이고 줄여서 pid라고 함. pid는 특정 시점에서 유일한 값을 보장 함커널 최대 pid는 기본적으로 32768이지만, /proc/sys/kernel/pid_max 값을 수정하면 더 많은 pid를 가질 수 있음 5.3 새로운 프로세스 실행하기 exec() 함수들 - excecl(), execle(), execlp(), execv(), execvp(), execvpe() 등fork() 시스템 콜 - cop..

리눅스 시스템 프로그래밍 - 3장, 4장

* 개인적으로 스터디한 내용을 메모한 내용이다. CHAPTER 3 버퍼 입출력 블록은 파일시스템의 최소저장단위를 나타내는 추상개념이다. 모든 파일 시스템의 연산은 블록 단위로 일어난다. 3.1 사용자 버퍼 입출력 dd(disk dump) 명령어로 블록크기를 1byte, 1024byte, 1130byte하면 1024byte가 가장 빠름을 확인할 수 있음. 블록의 배수로 연산을 수행했을때 가장 빠름 * 특정 디바이스의 블록크기를 알아내려면 stat() 시스템 콜이나 명령어를 이용하면 됨* 프로그램 내부에서 직접 사용자 버퍼링을 구현하는 것도 가능함 3.2 표준 입출력 * FILE이 대문자인 이유는 매크로임. 매크로에 typedef로 선언되어 있음 3.3 파일 열기 * fopen() 3.4 파일 디스크립터로 ..

리눅스 시스템 프로그래밍 - 1장, 2장

* 개인적으로 스터디한 내용을 메모한 내용이다. CHAPTER 1 핵심 개념 소개 시스템 프로그래밍이란 커널 및 핵심 시스템 라이브러리를 직접 사용하면서 하위 레벨에서 동작하는 시스템 소프트웨어를 작성하는 기술임. 셸, 컴파일러, 디버거, 시스템 유틸리티 및 시스템 데몬은 모두 시스템 소프트웨어 임. 네트워크 서버, 웹서버, 데이타베이스 역시 시스템 소프트웨어의 종류 임 1.1 시스템 프로그래밍 시스템 프로그래밍은 주로 커널 및 시스템 라이브러리를 사용하고, 애플리케이션 프로그램은 고급 라이브러리를 사용한다. 시스템 프로그래밍을 이해해야 작성하는 코드가 작동하는 레벨과 관계없이 더 나은 성능을 이끌어 낼 수 있다. 리눅스 시스템프로그래밍의 기본은 시스템콜, C라이브러리, C컴파일러임.시스템콜(system..