본문 바로가기
IT 코딩

시스템 프로그래밍 정리

by 김잔버 2020. 11. 17.

시스템 프로그래밍 정리

CH02 파일처리

저수준 파일 처리

pread, pwrite를 통해 원자적 실행을 보장

(쓰레드 실행중 섞이지 않는다.)

비직관적인 함수 형태

유닉스 및 호환 계열에서만 사용 가능

고수준 파일 처리

직관적이고 사용이 편리한 함수 형태

C언어를 지원하는 모든 플랫폼에서 사용 가능

라이브러리 레벨의 버퍼링이 있음

 

파일 출력이 섞이지 않게 하려면

è  저수준의 파일처리, (LOCK) 기능 이용(성능을 해칠 가능성 있음), 직렬화 이용

 

저수준 파일에서 형식화 이용 snprintf(버퍼에 형식화 값을 넣고 write로 써야함)

대신 dprintf 이용해 한번에 형식화 된값을 파일기술자에 write한다.

(*출력만 가능)

 

CH02 파일처리

프로세스의 메모리

 

텍스트(.text)

           일반적으로 프로그램의 실행코드가 존재하는 영역

데이터

           .rodata : 읽기전용으로 초기화되는 영역

           .data : 읽기/쓰기가 가능한 영역으로 초기화되는 영역

           BSS(Block Started by Symbol) : 초기화되지 않는 영역

 

스택(stack)

           로컬 자동변수, 즉 임의로 메모리를 잡지 않아도 함수의 시작에서 자동으로 생성되고

           파기되는 변수

(heap)

           malloc, calloc 같은 메모리 할당 함수를 사용하여 얻는 공간으로 프로세스 어디서든 접근        가능. 메모리 반환을 프로그래머가 해야함

int num;

bss

int num=1;

data

char str[] = “hello”

data(R/W)

char *p_str = “hello”

hello.rodata, p_str 포인터 변수는 data

const char str[] = “hello”

hello.rodata, str 변수는 rodata

static int i_val;

bss

 

l  스택의 한계 수치를 넘어가면 segmentation (violation) 오류가 발생한다

ð  10Mb를 넘어갈 때 è 로컬 변수를 크게 쓰는 경우가 없다.

*스레드의 경우 따로 heap공간에 별도의 가상 스택을 만들기 때문에 연관이 없다.

 

 

 

-메모리락

 

메모리 페이지에 대해 페이징(디스크 일부와 swap)을 금지

è  메모리 공간을 항상 램에만 있도록 강제하는 것

int mlock(const void *addr, size_t len); : 특정 위치의 메모리 페이지를 잠근다.

int mlockall(int flags) : 현재 프로세스의 모든 페이지를 잠근다.

*flags 인수

           MCL_CURRENT    : 현재 프로세스에 할당된 페이지 전체에 대해 메모리 락

           MCL_FUTURE      : 앞으로 할당되는 페이지에 대해 메모리 락

munlock : 특정 위치의 메모리 페이지 잠금을 해제

munlockall(void) : 모든 페이지 잠금을 해제

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*지역성의 원리

 

MMAP (memory mapped I/O)

장치나 파일을 메모리와 대응시키는 기법

           -사용법-

           파일을 열고 파일기술자를 mmap에 넘기는 방식을 사용

à read, write가 필요없이 포인터 변수를 이용하여 접근

mmap의 권한 : r, w, x

mmap의 공유방식 : shared memory, private memory

 

장점 : 블록 장치에 접근할 때 시스템 콜을 거치지 않기 때문에 가벼움

lseek를 쓰지 않고도 메모리의 특정 주소 번지로 이동하여 원하는 오프셋에서 읽고 쓸 수 있음

 

*메모리 대응전 대상 파일이 메모리의 크기보다 커야만 한다.

mmap : 메모리를 파일(장치)에 대응시킨다.

munmap : mmap을 해제

msync : 메모리와 파일을 동기화

mprotect : mmap 접근 권한을 변경

mremap : mmap을 재조정한다.

'IT 코딩' 카테고리의 다른 글

자료형  (0) 2020.11.19
암호 분석의 종류  (0) 2020.11.18
리눅스 정리  (0) 2020.11.16
객체지향, 상속, 생성자  (0) 2020.11.15
코딩 함수 fork, exec 계열, 상속되지 않는 파일기술자, system, posix_spawn  (0) 2020.11.14

댓글