전체 글 60

Linux 가상 메모리의 응용 #1 - file map

가상 메모리의 응용 파일 맵(file map) 일반적으로 프로세스가 파일에 접근할 때는 파일을 연 뒤에 'read()', 'write()', 'lseek()' 등의 시스템 콜을 사용한다. 뿐만 아니라 Linux에는 파일의 영역을 가상 주소 공간에 메모리 매핑하는 기능이 있다. mmap() 함수를 특정한 방법으로 호출하면 , 파일의 내용을 메모리에 읽어 들여 그 영역을 가상 주소 공간에 매핑할 수 있다. testfile 은 "hello" 라는 text를 담고 있는 file 이다. 다음 코드를 작성하고 실행하면 , 아래와 같이 file을 읽어 들이고 mmap() 함수를 통해 file mapping 을 하면, 파일의 내용을 메모리에 읽어 들여 그 영역을 가상 주소 공간에 매핑 할 수 있다. int fd; fd..

SystemProgramming 2021.05.08

Linux Memory 관리

>free free명령어 사용으로, 시스템의 총 메모리의 양과 , 사용 중인 메모리의 양을 알 수 있다. 모든 단위는 KB 임 total : 시스템에 탑재된 전체 메모리 용량임. 위 예시에서는 16GB 임 free : 표기상 이용하지 않는 메모리 buff/cache : 버퍼 캐시 또는 페이지 캐시가 이용하는 메모리. 시스템의 빈 메모리 (free) 가 부족하면 커널이 해제함 available : 실질적으로 사용 가능한 메모리. free 필드값의 메모리가 부족하면 해제되는 커널 내의 메모리 영역 사이즈를 더한 값이다. 해제될 수 있는 메모리에는 버퍼 캐시나 페이지 캐시의 대부분 혹은 다른 커널 내의 메모리 일부가 포함된다. >sar -r 1 1초 단위로 메모리에 관련된 통계 정보를 얻을 수 있다. free..

SystemProgramming 2021.05.08

sar : 프로세스(CPU core) 가 어떤 mode 로 작업 중인가?

설치: >sudo apt-get install sysstat 각 CPU core가 어떤 종류의 처리를 싱행하고 있는지 1초 단위로 측정함 >sar -P ALL 1 중간에 Ctrl+c 를 누르면, 평균 값이 저장 되며, sar은 종료 됨. %user + %nice : user 프로세스 %system : kernel 프로세스 >sar -P ALL 1 1 1초마다 1회만 출력 하도록 하기 무한 loop을 도는 loop 을 background로 실행하고, sar 출력 >./loop & >sar -P ALL 1 1 1초 동안 core 6 가 100% user 프로세스로 동작함 >kill 9082 //loop 를 죽인다. 이번에는 user 프로세스와 kernel 프로세스를 적당이 섞어 쓰도록 다음과 같은 코드를 작..

SystemProgramming 2021.05.07

strace : 어떠한 system call 이 호출되었는가?

//hello.c #include int main(void) { puts("hello world"); return 0; } >gcc -o hello ./hello.c >strace -o hello.log ./hello >cat hello.log printf("hello world %s\n","Man"); 각종 system call 처리에 걸린 시간을 microsecond 단위로 정밀하가 측정하여 보여 준다. >strace -T -o hello.log ./hello "hello world\n" 문자 처리에 32 microsecond 가 걸렸음을 알 수 있다. 출처 : 실습과 그림으로 배우는 리눅스 구조 , 다케우치 사토루저

SystemProgramming 2021.05.07

이 분야의 필독서 / 필독사이트

books System Programming Advanced Programming in the UNIX Environment (APUE) 인사이드 안드로이드 리눅스 커널 심층분석(로버트러브) 리눅스 커널의 이해 (다니엘 보베이) Linux Device Driver Linux Device Drivers, Third Edition [LWN.net] This is the web site for the Third Edition of Linux Device Drivers, by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. For the moment, only the finished PDF files are available; we do intend t..

SystemProgramming 2021.05.06

Configuration Requests

Configuration Requests 가 왜 필요한지 이해하기 위해서는 PCIe Configuration Space 에 대한 설명을 먼저 읽을 수 있음. Host software 는 direct 로 각 PCIe device 의 address space 에 접근 할 수 있는 것은 아니다. Host software 는 Root Complex를 통해서 Requests 를 생성하여, traget 이 되는 BDF에 전달할 수 있다. 결국 Request 라는 것은 PCIe Transaction Layer 에서 생성하는 TLP(Transaction Layer Packets)을 말한다. TLP는 어떠한 종류의 역할을 하느냐에 따라 다음 4가지 type 으로 분류될 수 있다. 1. Memory 2. IO 3. Con..

PCIe 2021.05.05

size_t 와 string::size_type

size_t 는 또는 std에 정의 되어 있다. sizeof() 함수의 return 형 이다. unsigned 데이터 타입으로, 장비가 32bit 이라면, 32bit 으로 표현 가능한 가장 큰 수 장비가 64bit 이라면, 64bit 으로 표현 가능한 가장 큰 수 를 담을 수 있다. string::size_type string.size() 함수의 return 형 이다. string 이 담을 수 있는 최대 문자 개수를 저장할 수 있는 데이터 타입. 역시 장비가 지원하는 가장 큰 값을 담을 수 있다.

SystemProgramming 2021.04.16

assert 와 negate pin

전자 공학 영역에서 signal 목적으로 사용하는 GPIO pin 을 컨트롤 하는 방법은 assert 하거나 negate 하는 것이다. assert 란 무엇인가? pin 을 강제로 low 또는 High 상태로 만드는 것이다. 강제로 low 상태로 만드는 것을 pull-down 이라고 하고, 강제로 high 상태로 만드는 것을 pull-up 이라고 한다 High 또는 Low 상태란 상대적인 것이며, 그 회로 마다 다르다. 예를 들면 많은 시스템 에서는 3.3V 가 high 이고 0V 가 low 인 경우가 많다. pin 의 종류에 따라 assert 가 low 인것이 있고, high 인것이 있다. 예를들면 PCIe 의 PREST#, CLKREQ# 같은 pin들은 assert 시키면 low 가 된다. 이러한 p..

Term 2021.04.09