본문 바로가기

Programming

linux 에서 page cache(페이지 캐쉬)란? disk I/O 의 효율을 위해 main memory 에 잡아놓은 cache buffer 의 명칭 아래와 같이 cache memory 의 상태를 알 수 있다. # free -m total used free shared buffers cachedMem: 6759 3121 3638 0 220 2008-/+ buffers/cache: 892 5867Swap: 4692 0 4692 원문 : http://wnstjqdl.tistory.com/46 시스템이 특별히 메모리 자원의 사용량이 없는데 캐쉬메모리가 많아 할당되어 여유메모리 할당이 적게 나올 경우 메모리를 초기화 하는 방법은 아래와 같다. To free pagecache(페이지캐쉬 초기화)echo 1 > /proc/sys/vm/drop_caches To fr.. 더보기
desktop search program Everything Search Engine http://www.voidtools.com/ indexing 이나 no indexing search 를 지원함 더보기
linux kernel 에서 사용 할 수 있는 file io functions 원칙적으로, linux kernel layer 에서는 file io 를 다루면 안된다. 여러 이유가 있겠지만, 일단 file descriptor list 를 각 task descriptor 에서 관리하고 있고, file을 linux kernel 단에서 접근하게 되면, 어느 process 에서 지금 kernel code 를 실행하는지 일일이 확인해야 하기 때문이다. 또한, 각 process 가 가진 access(read / write) 권한 문제도 발생하게 된다. 하지만, 이를 모두 감수하고라도, 꼭 써야만 하겠다면 다음 함수를 사용하면 된다. 여기에는 간단하게 동작하는 file operation 을 제공한다. open close size read write 더보기
linux user semaphore linux 의 user area 에서 사용하는 semaphore 에 대한 글 원문 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/IPC/semaphores원문2 : http://www.hanbit.co.kr/network/view.html?bi_id=1399 목차 1 세마포어란 무엇인가1.1 세마포어의 작동원리2 System V 세마포어2.1 세마포어의 사용2.2 세마포어의 관리2.3 semget 을 이용해서 세마포어를 만들자.2.4 세마포어를 이용해서 접근제어 하기2.5 세마포어 조작2.6 예제3 POSIX 세마포어3.1 세마포어 만들기3.2 세마포어 얻기 (기다리기)3.3 세마포어 정보 가져오기3.4 세마포어 되돌려.. 더보기
사용가용한 physical memory block 을 얻어오는 방법 /sys/devices/system/memory/ 의 메모리들 /sys/devices/system/memory# ls block_size_bytes memory14 memory32 memory4 memory47 memory54 memory61 memory8 hard_offline_page memory15 memory33 memory40 memory48 memory55 memory62 memory9 memory0 memory16 memory34 memory41 memory49 memory56 memory63 probe memory1 memory17 memory35 memory42 memory5 memory57 memory64 soft_offline_page memory10 memory18 memory36 .. 더보기
poll, sysfs sample code poll 사용 예제 man page 에는 poll_wait 가 대기를 시켜준다고 하는데..아무리 사용해 봐도 poll_wait 는 대기를 하지 않고 바로 return 처리된다. 이에 wait_event_interruptible 을 사용 하였다. 주문한 책이 오면 poll_wait 에 대해 좀 더 읽어 본 후 재업하도록 하겠다. DECLARE_WAIT_QUEUE_HEAD(wait_queue); unsigned int onegun_driver_poll(struct file *file, poll_table * wait){printk("%s()++\n", __func__);//poll_wait(file, &wait_queue, wait); /* normal case */if (wait_event_interrup.. 더보기
class 에 sysfs node 등록하여 사용하기 linux kernel 에서 kernel 단과 user 사이에 통신을 위한 방법중에 sysfs node 를 사용하는 방법이 있다.지원하는 함수는 아래 3가지 함수들이 있다. devclass_create_filedevice_create_file class_create_file 이중 devclass_create_file 은 삭제된 것으로 보인다.class_create_file 의 예제를 첨부한다. #include #include #include #include #include #include #include #include static dev_t first; // Global variable for the first device number static struct cdev c_dev; // Global v.. 더보기
demand paging page fault 가 발생하면 demand paging 이 일어나게 된다. 요구 페이징은 필요한 프로그램만 메모리에 적재하는 방법으로 가상 메모리 시스템에서 많이 사용된다. 요구 페이징을 사용하는 가상메모리에서는 페이지들이 실행 과정에서 실제로 필요해질 때 적재 된다.[출처] 가상 메모리 요구 페이징(Demand Paging)|작성자 SungWook Kang http://sqlmvp.kr/140191934297 더보기
리눅스커널의메모리관리 원문 : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1641 linux virtual memory 에 대한 너무 좋은 강좌 꼭 한번 읽어보시길 Step by Step 커널 프로그래밍 강좌③ 리눅스커널의메모리관리 지난 호에 우리는 커널 모듈 프로그래밍에 관한 기본적인 것들을 살펴보았다. 이번 호 에서는 지난 번 모듈 프로그래밍에 이어 커널에서 가장 흔히 사용하는 함수 중의 하나 인 kmalloc을 통해 커널에서 시스템의 메모리를 어떻게 관리하는지 알아보기로 한다. 글 _ 김민찬 KLDP 멤버, 전문 프로그래머 연재 순서 ① 커널 프로그래밍 환경 구축하기와 특징 ② 모듈 구현하기 ③ 리눅스 커널의 메모리 관리 ④ 커널.. 더보기
slab allocator 쉽게 설명하자면... task_struct 나 bio, bio_vec 같이 linux kenrel 에서 굉장히 빈번하게 사용되는 자료 구조들을 효율적으로 할당 / 해제 관리를 위한 메모리 관리 알고리즘이다. 특별한 함수가 있는것이 아니라..kcalloc, kmalloc 에서 호출해서 사용한다. SLAB Allocator - 1994년 Sun Microsystems의 Solaris 2.4 운영체제에 처음 적용된 이후 리눅스를 포함한 대부분의 UNIX 계통의 운영체제에서 사용하는 메모리 할당 정책. - 일정량의 내부 단편화 현상을 허용하는 trade off을 통해 외부 단편화 현상을 해결한 메모리 관리 기법임. - 10년이 넘도록 이러한 메모리 관리 기법을 대체할 만한 대안이 존재하지 않았음. - SLAB .. 더보기
linux kernel code 에서 system call 찾는 방법 system call 을 찾는 방법 SYSCALL_DEFINE 매크로를 통해 찾아야 한다 참고 : http://daehee87.tistory.com/253 더보기
segment 와 paging 기법 x86 에서는 segment 라는 선형주소를 물리주소로 변환시켜주는 unit 을 사용합니다.하지만 이기능이 linux 와 page 와 매우 유사하여 다소 혼동되는 부분이 있습니다.이에대해 understanding the linux kernel 에서는 다음과 같이 기술하고 있습니다. x68 마이크로 프로세서는 프로그래머가 app을 서브루틴이나 전역 데이터 영역, 지역데이터 영역같은 논리적인 부분으로 쪼갤 수 있도록 segmentation 이라는 기법을 지원한다. 그러나 리눅스는 이를 매우 제한적으로 사용한다. - segmentation 과 paging 은 둘 다 프로세스의 물리 주소 공간을 나누기 위해 사용됨.- segmentation 은 각 프로세스에 다른 선형주소 공간을 할당- paging 은 같은 선.. 더보기
커널 API - IOCTL 함수 작성시 자료형의 검사 원본 : http://forum.falinux.com/zbxe/index.php?document_srl=533526&mid=Kernel_API ioctl 함수를 만들때 다양한 검사를 수행할 수 있는 유용한 메크로 들이 있다.이를 소개한 글인데 내용이 너무 좋아서 링크해 본다.드라이버 작성시 file operation 에 사용되는 자료형의 형태 디바이스 드라이버를 작성하다 보면 주면 read, write, ioctl 을 통해 유저 어플리케이션과 데이타를 주고 받게 된다.이 때 데이타에 대한 유효성과 커널공간으로 사용자 영역으로부터의 데이타를 가져오는작업을 수행하게 되는데 이때 주의 해야할 점과 회피하는 방법이다. 물론 내가 드라이버를 짜고 어플리케이션을 짜면 어떤 자료형을 넘기는지 알기 때문에여러가지를 고.. 더보기
x86 inline assembly http://www.hep.wisc.edu/~pinghc/x86AssmTutorial.htm http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html int a=10, b; asm ("movl %1, %%eax; movl %%eax, %0;" :"=r"(b) /* output */ :"r"(a) /* input */ :"%eax" /* clobbered register */ ); Here what we did is we made the value of ’b’ equal to that of ’a’ using assembly instructions. Some points of interest are:"b" is the output operand, re.. 더보기
Lock-free, cas 참조 : http://www.gamedevforever.com/83 - Lockfree algorithm Lockfree 알고리즘을 이해하기 위해서는 먼저 Atomic Operation에 대해서 알아볼 필요가 있습니다. atomic operation의 정의 1. 일련의 모든 연산이 끝날 때까지 다른 프로세스는 그 연산에 대한 어떠한 변화도 할 수 없다. 2. 전체 연산 중 어느 하나라도 실패할 경우, 모든 연산은 실패하여, 시스템은 전체 연산이 시작하기 전의 상태로 복구된다. 32비트 인텔 CPU (IA-32)에서 지원되는 Atomic Operation에 관해 알아보자. 다음과 같은 인텔의 CPU 연산들 앞에 LOCK을 붙여 해당 연산을 Atomic하게 만들 수 있다. 즉, 스레드간의 동기화를 신경쓰지 .. 더보기
linxu bash shell script 명령어 참고 사이트 : http://cybercafe.tistory.com/330http://linuxconfig.org/bash-scripting-tutorial bash : Bourne-again shell - bash 의 상태 확인# env - shell script 시작파일 첫 머리에 다음 구문 삽입#!/bin/bash - 사칙연산 : leta=10b=10 let c=a+b echo $a+$b=$c --> 출력결과 : 10+10=20 c=$a$b echo $c --> 출력결과 : 1010 a="10"b="10" let c=a+b echo $a+$b=$c --> 출력결과 : 10+10=20 c=$a$b echo $c --> 출력결과 : 1010 - 길이로 문자열 자르기 : ${var:start:length.. 더보기
linux 명령어 dd # dd if=/dev/zero of=file_name bs=1MB count=1024 무언가 설명이 복잡한데.. 결국 위명령어는/dev/zero 라는 파일에서 내용을 복사해서 file_name 이라는 파일을 만들겠다는 것입니다.아마 /dev/zero 는 이런 용도로 사용하기 위해서 만들어진'크기 무한대'의 파일이 아닐까 생각이 됩니다. dd의 입출력시에 사용되는 단위들c : Character, 1bytew : Word, 2bytesk : Kilo Bytes, 1024bytesb : Block, 512bytes 주요옵션bs=BYTES : 한번에 BYTES씩 읽어들이고 출력. ibs와 obs를 한번에 지정한 것과 같음cbs=BYTES : 한번에 BYTES씩 변환작업을 함conv=CONVS : ,로 분리된 .. 더보기
TLB (Translation Lookaside Buffer) 원문 : http://embedded21.egloos.com/viewer/757087 TLB (Translation Lookaside Buffer) 모든 virtual memory reference는 2개의 physical memory access가 필요함. 1. appropriate page table entry 2. the desired data straightforward virtual memory scheme이 memory access time을 2배로 만든다. (설명하자면, page table 에서 virtual address 에 매칭된 physical address 를 찾기위해 한번 물리메모리를 access 하고,얻어온 물리 메모리주소를 기반으로 실제 데이터를 얻어오기 위해서 한번더 acces.. 더보기
chrome 의 유용한 command parameter 구글을 cmd 로 실행할때 유용한 파라미터 들이다. ex>chrome.exe --app=http://endic.naver.com/popManager.nhn?sLn=kr&m=miniPopMain --app-window-size=1400,760 chrome.exe www.haver.com "--app=" : 팝업창으로 띄워준다"--new-window" : 새윈도우로 띄워준다. (보통은 기존창에 새탑으로 뜬다)"--app-window-size=1400,760" : 창을 띄울때 사이즈를 지정해 준다. 더보기
ffs, ffsl, ffsll, fls, flsl, flsll 함수 설명 NAME ffs, ffsl, ffsll, fls, flsl, flsll -- find first or last bit set in a bit string LIBRARY Standard C Library (libc, -lc) SYNOPSIS #include int ffs(int value); int ffsl(long value); int int ffsll(long long value); fls(int value); int flsl(long value); int flsll(long long value); DESCRIPTION The ffs(), ffsl() and ffsll() functions find the first bit set (beginning with the least significant bi.. 더보기
cmd 창 특정 경로에서 open 하기 [시작 - 모든 프로그램 - 보조 프로그램 - 명령 프롬프트] 여기에 마우스 오른쪽 버튼 누른다음 [속성]을누릅니다. [명령 프롬프트 등록 정보] 창이 열리면 [바로 가기]를 누릅니다. [대상] %SystemRoot%\system32\cmd.exe [시작 위치] C:\Documents and Settings\Administrator\바탕 화면\JAVA 이렇게 입력하고 [확인]을 누릅니다. 여기서 Administrator 는 질문자님의 [사용자 계정]을 입력합니다. 더보기
__builtin_return_address(0) 무엇일까? 연구주제 더보기
kernel log back ground 로 저장하기 cat proc/kmsg > /data/log.txt & 더보기
sorting algorithm 을 한눈에 보여주는 동영상들 오오 멋진데요. 더보기
make mrproper 외 kernel build command Kconfig 나 defconfig 들을 수정한 이후알수없게 build error 가 계속 발생할때가 있다.이때, make mrproper 를 실행해 주면 정상적으로 build 가 된다. makefile, Kconfig, defconfig 등을 수정하고 난 이후에는꼭 make mrproper 를 실행해 주자. [ 커널 빌드 명령어의 의미 ] make mrproper- 기존에 설정되어 있던 모든 의존관계를 제거하는 역할. make menuconfig- 콘솔에서 메뉴 형식으로 커널 환경 설정 시작.- make config -> 질의 응답형식으로 물어봄. (오래걸림)- make xconfig -> GUI 환경에서 사용. make dep- 커널에 설정된 내용에 따라서 소스 코드의 파일을 확인, 필요한 링크를 생.. 더보기
Gray,RGB,HSV,YCbCr color table 용어 정리 Graphics 관련 업무를 하다보면 관련해서 생소한 용어들이 많이 나온다.이중 color table 에 대해 잘 정리한 글이 있어서, 앞부분만 소개해 본다. 원문 : http://darkpgmr.tistory.com/66 1. 기본적인 색상 모델 알아보기 색상모델하면 Gray 모델, RGB 모델, HSV 모델, YCbCr 모델 등이 떠오를 것이다. Gray 모델은 색(color) 정보를 사용하지 않고 밝기 정보만으로 영상을 표현하는 것이다. 검정색 0부터 흰색 255까지 총 256단계의 밝기값(intensity)으로 영상 픽셀값을 표현한다. RGB 모델은 가장 기보적인 색상모델로서 색(color)을 Red, Green, Blue의 3가지 성분의 조합으로 생각하는 것이다. RGB 모델에서 검은색은 R=G.. 더보기
programmer 용어 사전 fetch To load an instruction or piece of data from memory into a CPU's register. All instructions must be fetched before they can be executed. The time it takes to fetch an item is known as the fetch time or fetch cycle, and is measured inclock ticks. 더보기
git 간편 안내서 git 을 굉장히 간결하고 친숙하게 소개해 주고 있다. http://rogerdudler.github.io/git-guide/index.ko.html 아래는 한글 ppt 형식으로 svn 과의 차이점을 설명해 줍니다. http://www.slideshare.net/einsub/svn-git-17386752 더보기
local_irq_disable(), local_irq_save(flags) 분석 두 함수를 비교하고, local_irq_disable()대신 local_irq_save(flags)를 쓰는 이유를 알아보자. local_irq_disable#define local_irq_disable() \ do { raw_local_irq_disable(); trace_hardirqs_off(); } while (0) #define raw_local_irq_disable() arch_local_irq_disable() static inline void arch_local_irq_disable(void) { unsigned long temp; asm volatile( " mrs %0, cpsr @ arch_local_irq_disable\n" // cpsr 을 읽어서 %0 에 저장 " orr %0, %.. 더보기
CPSR 원문 : http://forum.falinux.com/zbxe/index.php?document_srl=575677&mid=lecture_tiparm register 그림 : http://recipes.egloos.com/4986854 오늘은 ARM register 중 하나인 cpsr 에 대해서 좋은 글이 있어서, 필요한 내용을 복사해 왔습니다.이것 외에도 ARM 에 대해서 좋은 강좌가 많은 블로그 이니, 한번씩 들려보세요. CPSR (Current Program Status Register) 프로그램의 상태를 저장하는 레지스터 31비트에서 24까지는 플래그(Flag) 비트, 23비트에서 16까지는 상태(Status) 비트, 15비트에서 8까지는 확장(Extension)비트, 7비트에서 0 비트까지는 제.. 더보기