프로세스 : 실행중인 프로그램
프로그램 : 실행 시에 프로세스를 어떻게 만들지에 대한 광범위한 정보를 담고 있는 파일
프로그램에 포함된 내용
1. 바이너리 포맷 식별자 : ELF(Executable and Linking Format) 를 채택
2. 기계어 명령
3. 프로그램 진입점 주소
4. 데이터
5. 심볼 테이블과 재배치 테이블
6. 공유 라이브러리와 동적 링크 정보
7. 기타정보
#include <unistd.h>
pid_t getpid(void) : 언제나 성공적으로 호출자의 프로세스 ID 를 리턴
pid_t getppid(void) : 언제나 성공적으로 호출자의 부모의 프로세스 ID 를 리턴
세그먼트 : 각 프로세스에 할당된 메모리는 흔히 세그먼트라고 부르는 여러 영역으로 나뉜다.
1. 텍스트 세그먼트
2. 초기화된 데이터 세그먼트
3. 초기화되지 않은 데이터 세그먼트
4. 스택 : 동적으로 자라고 줄어드는 세그먼트로, 스택 프레임을 담고 있다. 스택 프레임에는 함수의 지역변수, 인자, 리턴 값이 저장된다.
5. 힙 : 실행 시에 동적으로 메모리를 할당하는 영역. 힙의 꼭대기를 프로그램 브레이크라고 한다.
가상메모리 관리
프로그램의 두 가지 지역성
1. 공간적 지역성 : 프로그램이 최근에 접근한 메모리 주소 근처에 접근하는 경향이다.(순차적 처리때문)
2. 시간적 지역성 : 프로그램이 최근에 접근한 메모리 주소에 가까운 미래에 다시 접근하는 경향이다.(루프때문)
argc : 명령행 인자 개수
argv[] : 명령행 인자를 가리키는 포인터의 배열
/proc/PID/cmdline : 프로세스의 명령행 인자 확인
환경변수
- 대부분의 쉘에서 export 명령을 통해 환경 변수에 값 추가 가능
- 프로그램에서 환경변수 접근
#include "tlpi_hdr.h"
1. extern char **environ (전역변수로 접근)
#include <stdlib.h>
2. char *getenv(const char *name) : (값) 문자열을 가리키는 포인터를 리턴하거나, 해당 변수가 없으면 NULL 리턴
3. int putenv(char *string) : 성공하면 0 리턴, 에러가 발생하면 0이 아닌 값을 리턴
- string 인자는 이름=값 형태의 문자열을 가리키는 포인터
4. int setenv(const char *name, const char *value, int overwite) : 성공하면 0을 리턴하고 에러가 발생하면 -1 리턴
- name과 value 가 가리키는 문자열을 그 버퍼에 name=value 형태로 복사
5. int unsetenv(const char *name) : 성공하면 0을 리턴하고 에러가 발생하면 -1 리턴
- 해당하는 변수를 환경 변수 목록에서 제거
6. int clearenv(void) : 성고하면 0을 리턴하고 에러가 발생하면 0이 아닌 값을 리턴
- 환경 변수 목록 전체를 삭제
goto 수행
- 함수간의 비지역 goto가 가능하다. 컴파일러 최적화 관련 문제를 피하려면, 이 함수들을 쓸 때 변수를 volatile 로 선언해야 한다.
#include <setjmp.h>
1. int setjmp(jmp_buf env);
- 처음 호출하면 0을 리턴하고, longjmp()을 통해 호출하면 0이 아닌 값을 리턴
2. void longjmp(jmp_buf env, int val)
- setjmp 위치로 이동
'리눅스' 카테고리의 다른 글
[리눅스 API] 메모리 할당 (0) | 2015.08.03 |
---|---|
[리눅스] 파일시스템 (0) | 2015.07.31 |
윈도우 이클립스 gcc 컴파일 (0) | 2015.07.27 |
grep 명령어 (0) | 2015.07.26 |
리눅스 명령어 모음 (0) | 2015.07.26 |
댓글