2012년 9월 29일 토요일

[C] queue


#define QUEUESIZE 256 //size변경하면서 테스트 해볼 것
#define TRUE 1
#define FALSE 0


typedef struct{
  int q[QUEUESIZE+1];
  int first;
  int last;
  int count;
} queue;

/*큐에 대한 함수(circular queue)*/
void init_queue(queue *q) //큐 초기화
{
  q->first = 0;
  q->last = QUEUESIZE-1;
  q->count = 0;
}

void enqueue(queue *q, int x) //큐에 값을 저장하는 함수
{
  if (q->count >= QUEUESIZE)
    printf("Warning: queue overflow enqueue x=%d\n", x);
  else{
    q->last = (q->last+1) % QUEUESIZE;
    q->q[ q->last ] = x;
    q->count = q->count+1;
  }
}

int dequeue(queue *q) //큐에서 값을 빼오는 함수
{
  int x;

  if(q->count <= 0) printf("Warning: empty queue dequeue.\n");
  else{
    x = q->q[ q->first ];
    q->first = (q->first+1) % QUEUESIZE;
    q->count = q->count - 1;
  }

  return(x);
}

int empty(queue *q) //큐가 비었는지 확인하는 함수, 비었으면 TRUE리턴
{
  if(q->count <= 0) return(TRUE);
  else return(FALSE);
}
/*큐에 대한 함수 끝*/

[C] pthread in window

http://taycleed.tistory.com/97
http://blog.naver.com/PostView.nhn?blogId=melipion7&logNo=20091502431&viewDate=&currentPage=1&listtype=0

이틀간의 삽질 끝에 내린 결론 : 그냥 처음부터 리눅스를 쓰는게 좋다...

2012년 9월 8일 토요일

2012년 9월 4일 화요일

[OS] multitasking

▶ 멀티태스킹(Multitasking)



멀티태스킹이란 동시에 여러 개의 프로세스들이 운영될 수 있는 능력입니다. 윈도우 는 다중 프로세싱을 수행하기 위한 두 가지 방식을 사용합니다. 이 방법이란 협력 멀티태스킹(Cooperative Multitasking) 과 선제 멀티태스킹(Preemptive Multitasking)을 말합니다.

윈도우3.1 용 16비트 프로그램을 실행할 때는 협력 멀티태스킹이 사용됩니다. 협력 멀티태스킹은 시스템에서 수행되고 있는 프로세스들간을 스위칭함으로써 가능합니다.

예를들어 협력 멀티태스킹 중에 어떤 프로세스가 CPU를 필요로 한다면 필요한 시간을 알리기 위해 대기 행렬(Queue :큐) 에 메시지를 제출할 것입니다. 통제에 사용되는 프로세스는 어떤 다른 프로세스가 통제가 필요한지를 알아보기 위해 정기적으로 대기행렬을 확인합니다. 이 때 메시지가 확인되면, 이 통제 프로세스는 실행을 중단하고 다른 프로세스가 실행을 시작합니다. 이러한 접근의 문제점은 언제 프로세스가 대기 행렬을 체크할 것인가에 대한 일정한 표준이 없다는 것입니다. 그 결과로 어떤 프로그램은 다른 프로그램이 5내지 10초당 한번꼴로 체크하는데 비해 1초당 수회를 체크해야 합니다. 그러면 몇몇 프로세스들은 보다 많은 CPU 시간을 사용해야 합니다.

멀티태스킹의 다른 방식인 선제 멀티태스킹은 보다 강력하고 진보된 것입니다. 이 유형의 멀티태스킹에서 운영체제는 CPU를 보다 적절히 사용합니다. 이 방식은 응용 프로그램이 CPU를 점유하고 있다하더라도 운영체제가 제어권을 가지고 다른 응용 프로그램이나 시스템 프로세스에게 CPU를 할당해 줄 수 있는 방식입니다. 윈도우에 의해 특별하게 만들어진 32비트 응용 프로그램은 이 유형의 멀티태스킹으로 많은 이익을 얻게됩니다. 운영체제 스스로가 CPU 시간을 결정하기 때문에 16비트 응용 프로그램이 실행될 때 발생하던 오버헤드(Overhead) 는 더 이상 발생하지 않습니다. 32비트 프로그램을 사용하는 것이 좀더 간편합니다. 그리고 프로세스 제어기에 의해 과거의 방식보다 CPU 시간이 각 프로세스들에게 공평하게 할당되기 때문에 응용 프로그램들은 보다 자연스럽고 안전하게 작동합니다.


출처 : http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=104&docId=156736&qb=Y29vcGVyYXRpdmUgbXVsdGl0YXNraW5n&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=RZUgE35Y7tlssteI7wZssc--094609&sid=UEXTmyrDRVAAABR6EdA