본문 바로가기

전체 글

git 명령어 계속 update 예정 ------------------------------------local git------------------------------------ git repository 만들기 : git init bare git 만들기 : git clone --bare branch 삭제 : git branch -D tag 보기 : git tag tag 만들기 : (*lightweight방식) : git tag (*annotated 방식) : git tag -a -m "" Lightweight: 특정 커밋에 tag Annotated: 만든 사람, 이메일, 날짜, 메시지가 담긴 tag 커밋 생성 tag 삭제 : git tag -D empty commit 만들기 : git commit --allow.. 더보기
구조체 비트 필드 structure bit field "구조체(structure)의 비트 필드(bit field)" 는 구조체의 정수 타입의 멤버 변수를 비트 단위로 쪼개서 사용할 수 있게끔 해주는 방법이다. 사용법 :struct 구조체 이름 { 정수형type 변수명 : 비트수 }정수형type : (unsigned, signed)char, short, int, long 123456789101112131415161718#include struct normal { unsigned char ch1; unsigned char ch2;};struct bit_field { unsigned char ch1 : 3; unsigned char ch2 : 2;}; int main(){ printf("normal size : %d, bit_field size : %d \n",.. 더보기
copy_to_user(), copy_from_user(), kernel space and user space 결론 : User space와 Kernel space는 주소 체계가 다르다! 왜? 유저가 어플리케이션을 실행시키면 커널은 실행시킨 어플리케이션을 위해 메모리를 할당해 준다. 그림에서 유저 스페이스에 속하는 어플리케이션이 2개 있다.커널 메모리상에서는 각각 [0x3000:0x6000], [0x8000:0x9000] 에 속하지만각 어플리케이션은 자신이 0x0000부터 시작한다고 생각한다.두 번째 어플리케이션에서 변수 x의 경우, 유저 스페이스에서 0x100에 위치하지만 실제 커널 스페이스에서는 0x8100이다,이처럼 커널 스페이스와 유저스페이스 사이엔 관점의 차이가 있기 때문에 시스템 콜을 통해 포인터를 사용해 두 영역(커널 스페이스유저 스페이스)을 넘나들 때에는커널 스페이스에 있는 코드는 유저 스페이스의 .. 더보기