프로그래밍 29

C언어] bool, Boolean 논리형 정의하여 사용: 불린/불리언

참조 http://mwultong.blogspot.com/2006/10/c-bool-boolean.html C++가 아닌, 전통적인 C언어에는 bool (Boolean; 불린, 불리언) 타입이 없습니다. 그래서 사용자가 만들어 주어야 합니다. typedef 를 사용하여 bool 이라는 자료형을 하나 만들었습니다. false (거짓) = 0 true (참) = 1 에 해당합니다. C에서, 불린(Boolean) 자료형 정의 예제 소스 파일명: 0.c #include typedef enum {false, true} bool; int main(void) { bool myTest = true; if (myTest) puts("논리값이 true 라면 이 줄이 출력됩니다."); myTest = false; if (m..

프로그래밍 2011.10.19

schedule setting

SCHED_OTHER : 일반적인 process/thread 의 정책. priority를 0만 가질 수 있음. timeshared. SCHED_FIFO : realtime을 위한 정책. priority 1~99. timeshared 아님. 오직 더 높은 priority를 가진 task에게만 선점됨. block, yield, terminate되기 전까지 계속 실행. SCHED_RR : realtime을 위한 정책. priority 1~99. 동일한 priority를 가진 waiting SCHED_RR task와 timeshared. timeshare할 대상이 없을 때 SCHED_FIFO와 동일하게 동작.

프로그래밍 2011.10.11

리눅스커널 - 프로세스 스케줄링

http://dblab.co.kr/entry/리눅스커널-프로세스-스케줄링 프로세스 스케줄러란 ? 다음번에 실행될 프로세스를 선택하는 커널 컴포넌트. 시스템에 있는 실행 가능한 프로세스들에게 유한한 프로세서 시간을 분배해 주는 커널의 하위 시스템. 리눅스와 같은 멀티태스킹 운영체제의 기본요소로 어느 프로세스를 실행할 것인가를 선택하는 동시에, 시스템의 성능을 최적화하고, 여러개의 프로세스가 마치 동시에 실행되고 있는 것과 같이 보이도록 해야 하는 책임을 갖는다. 동작시나리오 실행가능한 프로세스가 여럿 있다고 할 때 프로세서(CPU)를 최대한 이용하기 위해서는 항상 어떤 프로세스든 실행중이면 되는 것이다. 만약 시스템의 프로세서 수보다 많은 프로세스가 있을 경우 몇몇 프로세스는 실행될 수 없다. 이러한 프로..

프로그래밍 2011.10.10

스케줄링

http://www.iamroot.org/xe/index.php?mid=Kernel_8_ARM_H&page=9&document_srl=41567 리눅스는 스케줄링에 소모되는 시간을 예측할 수 있게끔(O(1) 스케줄러). 선순위 레벨(0~139)을 표현하는 Active, Expired 비트맵 배열 두개를 가지고 있습니다. 고정된 크기의 비트맵 배열이므로 상수시간안에 스케줄링이 가능하고, 고정 시간 복잡도는 O(1)으로 표시된다네요. 뭐 여기까지는.. ㅎ 그런데 왜 레벨이 왜 0~139 일까 의문을 가지게 되겠죠. 이부분은 여기서 시작\됩니다. 두둥~ 일단 프로세스의 정보를 가지고 있는 task_struct 구조체의 policy 필드(스케줄링 정책)에서 SCHED_FIFO, SCHED_RR, SCHED_OT..

프로그래밍 2011.10.10

실시간 리눅스

http://flytospace.tistory.com/ 실시간 리눅스 리눅스는 각 태스크들을 스케줄링 하기위해 SCHED_FIFO와 SCHED_RR, 그리고 SCHED_OTHER를 지원한다. 이 중 SCHED_FIFO와 SCHED_RR은 선점형 실시간 태스크로 동작하며 SCHED_OTHER는 일반 프로세스로 동작한다. 일반적으로 SCHED_FIFO와 SCHED_RR의 우선순위는 1-99이며 SCHED_OTHER는 0이다. 이 우선순위는 숫자가 클수록 높은 우선순위를 의미한다. 리눅스를 사용해 실시간 시스템을 작성하려는 응용프로그램 개발자는 리눅스의 이러한 특성을 이용해 설계및 개발하여야 한다. 다음은 FIFO 프로세스를 생성하여 사용하는 예제이다. #include int main() { struct sc..

프로그래밍 2011.10.10

Reliable udp

Reliable UDP 구현과 활용 programming/server 2005/11/26 20:18 출처 : http://www.gamecode.org/tt/entry/2743 다른 용도로 예전에 작성했던 글인데, 말투만 좀 수정해서 업데이트 합니다. (^^) 네트워크 게임에서 UDP는 물리적인 네트워크 Latency에 근접한 반응 속도를 나타낸다는 의미만으로도 기여하는 역할은 매우 크다고 할 수 있습니다. 다만 데이터의 신뢰도가 떨어지기 때문에 제한적으로 사용되는 경우가 많습니다. 좀 더 적극적으로 UDP의 단점들을 보완하는 쪽으로 접근해서, 데이터 전송에 신뢰성을 준다면 TCP의 기능 일부를 효과적으로 대체할 수도 있을 것입니다. 이런 Reliable UDP 구현은 해외 유명 게임과 네트웍 엔진에서도..

프로그래밍 2011.08.18

1차원 배열 다수를 2차원 배열로

막 입문한 사람들은 1차원 배열 다수를 2차원 배열로 결합할때 FOR 문을 사용할 지도 모릅니다. 하지만 이런 방식은 상당한 성능의 하락을 가지고 오게되죠. (움직이는 영상들을 처리할 경우에 포문 한번에 눈에 보이는 프레임 하락도 있습니다) 그래서 간단하지만 실용적(?)인 걸로 한번 시작을 끊어볼 까 하네요. 01 typedef int ARRAYTYPE; 02 const int INDEX = 30; 03 const int ARRAYSIZE = sizeof(ARRAYTYPE) * INDEX;ARRAYTYPE SrcArray1[INDEX]; 04 ARRAYTYPE SrcArray2[INDEX]; 05 ARRAYTYPE SrcArray3[INDEX]; 06 ARRAYTYPE DstArray[3][INDEX];..

프로그래밍 2011.08.18