레이블이 endian인 게시물을 표시합니다. 모든 게시물 표시
레이블이 endian인 게시물을 표시합니다. 모든 게시물 표시

2007년 9월 11일 화요일

Windows Network 실습 1-1

---> 실습 1일차 <---

* 생성

File -> New -> Project ->Win32 Console App.. -> Simple ...

* 설정

File View 창 -> Header Files -> stdAfx.h 편집

#include 추가

* ws2_32.lib 라이브러리 추가

1) Project -> Setting -> Link -> Object/libraly modules

뒤에 ws2_32.lib 열을 추가

2) #pragma comment (lib, "ws2_32.lib") 열을 헤더파일에 추가



실습 내용



#include "stdafx.h"#include
int main(int argc, char* argv[]){

WORD wVersionRequested;

WSADATA wsaData;
wVersionRequested = MAKEWORD(2,2);
if(WSAStartup(wVersionRequested, &wsaData) != 0) {

return FALSE;

}
if(LOBYTE(wsaData.wVersion) != 2 HIBYTE(wsaData.wVersion) != 2) {

WSACleanup();

return FALSE;

}
printf("WSAStartup success...\n");
return 0;

}















* Endian
0x12, 0x34, 0x56, 0x78
^ ^ ^ ^
l l
MSB LSB
-------------------
ADDR 10 20 30 40
-------------------
Big Endian 12 34 56 78
--------------------
Little Endian 78 56 34 12
--------------------

2 X 2
(1) H = > N (1) long
(2) N = > H (2) short
위의 조합으로 만든다...
예) htonl( host to network long) -> 호스트에서 네트워크로 크기는 long 타입으로...

2007년 9월 4일 화요일

- static 키워드-
중복 함수명과 변수명의 충돌을 방지 시킬수 있다.
커널 소스에 빈번히 사용 된다.

-메모리 할당과 해제
- 이식성과 데이터형
- 시스템 별로 크기가 달라질수 있다. 그래서 변함 없는 키워드를 사용한다.
__s8, s8 8비트 (byte) | __u8, u8 8비트 (byte)
__s16, s16 16비트 ( word) | __u16 u16 16비트 (word)

- 구조체
- packed 키워드를 사용하여 실제 변수의 크기 선언(데이터를 압축해서 보낸다.)
- typedef sturct{
u16 index; //2바이트
u16 data; //2바이트
u8 data2; //1바이트
}__attribute__((packed))testctl_t // 5바이트가 된다.

- 바이트 순서

- 낮은 바이트를 먼저 저장하면 리틀 엔디안
- 높은 바이트를 먼저 저장하면 빅 엔디안
- #include //빅 엔디안 처리
- #include //리틀 엔디안 처리
- #include //호환성을 위한 매크로

-메모리 할당 -
참고 서적 * 박장수 - 커널 분석 2.4 *
* 커널에서 지연이 발생되지 않도록 다른 프로세스에 지연이 영향을 입히지 않도록 해야 한다.
- kmalloc (), kfree()
- 커널의 물리메모리 공간에서 메모리 할당.
- kmalloc 으로 할당 할수 있는 크기는 = > 128Kbyte 이하이다.
- GFP_KERNEL 동적 메모리 할당이 항상 성공하도록 요구
메모리가 충분하지 않으면 동적 메모리를 할당 할 수 없을때까지 sleep
인터럽트 서비스에서는 사용 불가
- GFP_ATOMIC 커널에 할당 가능한 메모리가 있으면 무조건, 없으면 NULL값을 즉시 전달
- GFP_USER 커널 영역에서 할당은 받지만 우선순위가 떨어진다.
- GFP_DMA 연속된 물리 메모리를 할당 받을 때 사용

- ZONE 정의
- ZONE_DMA ~16M
- ZONE_NORAML 16 ~ 846M
- ZOME_HIGHMEM 846M 이상

- Vmalloc (), vfree()
- 커널의 가상 주소 영역에서 할당한다.
- get_free_page(), free_page()
- 페이지 단위로 할당한다.