1. semapore에 대해 조사유닉스시스템의 프로그래밍에서 semapore는 운영체계의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 또는 동기화 시키는 기술이다. semapore는 운영체계 또는 커널의 한 지정된 저장장치 내 값으로서, 각 프로세스는 이를 확인하고 변경할 수 있다. 확인되는 semapore의 값에 따라, 그 프로세스가 즉시 자원을 사용할 수 있거나, 또는 이미 다른 프로세스에 의해 사용 중이라는 사실을 알게되면 재시도하기 전에 일정 시간을 기다려야만 한다. semapore는 이진수 (0 또는 1)를 사용하거나, 또는 추가적인 값을 가질 수도 있다. semapore를 사용하는 프로세스는 으레 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 semapore 사용자들이 기다리도록 해야한다. semapore는 일반적으로 메모리 공간을 공유하거나, 또는 파일들을 공유 액세스하기 위한, 두가지 정도의 목적을 위해 사용된다.- 사용예제#include #include #include #include #include #include union Sem{int val;struct semid_ds *buf;ushort *array;struct seminfo *_buf;void *_pad;};int main(){key_t key_shm1, key_shm2;int i, j, pid, shmid, semid;double * Shmptr;union Sem sema;struct sembuf sem_lock = {0, -1, SEM_UNDO};struct sembuf sem_unlock = {0, 1, SEM_UNDO};key_shm1 = ftok( "," , 'n'); /* 유일한 키값을 얻는다. */key_shm2 = ftok( "," , 'm'); /* 유일한 키값을 얻는다. */shmid = shmget(key_shm1, sizeof(char), IPC_CREAT | 0660);Shmptr = (double *)shmat(shmid, 0, 0);*Shmptr = 0.0;semid = semget(key_shm2, 1, IPC_CREAT | 0660);sema.val = 1;semctl(semid, 0, SETVAL, sema);pid = fork();if(pid!=0) { /* Parent Process 1,500,000*/for(i=0;i
1. 단체계산법(simplex algorithm)단계 1. 초기 기저가능해를 구한다.○ 임의의 기저가능해를 구한다.단계 2. 최적판정 및 진입변수 선택○ 가장 작은 계수를 가지는 변수를 구하여 진입변수(entering variable)로 선택한 다.{for (i=0; i < MaxColumn ; i++){if (a[0][i] < MinValue){MinValue = a [0][i];Pivot1 = i;}}단계 3. 탈락변수 선택○ 진입변수에 해당하는 열과 우변상수 사이의 비율을 구하고 그 열에서 0과 음의 값을 가진 계수를 무시한다. 이 비율에서 최소치를 구하여 이에 해당하는 변수 를 탈락변수(leaving variable)로 선택한다.{for (i=1; i < MaxRow; i++){if (a[i][Pivot1] == 0) continue;if ((a[i][MaxColumn-1] / a[i][Pivot1]) < MinValue){MinValue = a[i][MaxColumn-1] / a[i][Pivot1];Pivot2 = i;}}단계 4. 기저 수정○ 계산형에서 a[i][j]를 선회점으로 하여 선회 연산을 실시한다. 즉, 임의의 점 a[i][j]를 기점으로 가우스·졸단 소거법을 수행한다.{for (i=0; i < MaxColumn ; i++){a[Pivot2][i] = a[Pivot2][i] / PivotPoint1;}for (i=0; i < MaxRow; i++){if (i == Pivot2) continue;PivotPoint2 = a[i][Pivot1];for (j = 0 ; j < MaxColumn ; j++){a[i][j] = a[i][j] - PivotPoint2 * a[Pivot2][j];}}○ 이 단계에서 기저해가 최적해를 검사하고 최적해가 아니면 새로운 해를 구하기 위해 다시 단계 2로 돌아간다. 즉, 새로운 진입변수를 선택한다.{for (i=0; i < MaxColumn ; i++){if (a[0][i] < MinValue){MinValue = a [0][i];Pivot1 = i;}}2. 구현프로그램은 별도 첨부 ( #1 )3. 결과 출력z -40x1 -50x2 -80x3 -110x4 = 01x1 + 1x2 + 1x3 + 1x4 + 1x5 = 153x1 + 5x2 +10x3 + 15x4 + 1x6 = 1057x1 + 5x2 + 3x3 + 2x4 + 1x7 = 120위의 결과에서 {보듯이 단체계산법으로 목적함수의 최대값과 그때의 해를 알 수 있다.