앞서 [운영체제] - [OS] Deadlock의 조건 에서 Deadlock을 일으키는 4가지 조건에 대해서 알아보았습니다. Deadlock은 일어나서는 안되는 일이니 막기위해서는 어떠한 조건을 피해야하나를 살펴보겠습니다. 1) Mutual Exclusion - 한 번에 1개의 Process만 Shared resource에 접근할 수 있는 조건이였습니다. 하지만 이 조건을 피해버리면 여러개의 Process가 Shared resource에 접근할 수 있게되므로 Race Condition 상태가 발생할 수 있습니다. 따라서 막으면 안되는 조건입니다. 2) Preemption Disable - 다른 Process가 소유하고 있는 lock을 선점(획득)할 수 없다는 조건이였습니다. 쉽게 풀어보면 공유 자원이 선점..
[운영체제] - [OS] DeadLock 앞서 Deadlock이 무엇인지에 대해서 알아보았습니다. 이번엔 Deadlock의 조건에 대해서 알아보겠습니다.Deadlock의 조건 1) Mutual Exclusion 오직 1개의 Process가 한 번에 Shared Resource에 접근할 수 있습니다. Semaphore의 의미와 같습니다. 2) Preemption Disable 다른 Process가 소유하고 있는 lock을 어떠한 Process가 Preempt(획득) 할 수 없습니다. 3) Hold and Wait Process는 다른 소유의 lock을 얻으려면 기다려야 합니다. (Block 상태) 4) Circular Wait Lock의 요청이 Circle(cycle)을 가지는 형태이면 안됩니다. 앞선 [..
OS에서 일어날 수 있는 DeadLock에 대해서 알아보겠습니다. DeadLock 이란? DeadLock은 다른 Process가 소유한 자원을 요청하는 행위가 서로에게 행해져 모든 Process가 Block이 된 상태를 의미합니다. 예제를 통해 알아보겠습니다. 다음과 같은 2개의 Process가 있습니다. 123Process1owns lock Arequests lock Bcs 123Process2owns lock Brequests lock Acs Process1은 lock A를 가지고 있습니다. 즉, A라는 Semaphore를 가지고 있습니다. Process2는 lock B를 가지고 있습니다. Semaphore는 한 곳에서 사용중이면 다른 Process를 차단하는 목적으로 사용합니다. 따라서 Proces..
[MicroC/OS-II] CPU Scheduling with Non-Preemptive에 이어서 살펴보겠습니다. 2. Preemptive (선점방식) Preemptive은 한 Process가 실행 중일때 다른 Process가 CPU를 사용할 수 있습니다. 2가지의 예를 살펴보겠습니다. ㄱ) Round Robin 이름 그대로 뱅뱅 돈다고 생각하시면 됩니다. 이전 예제와 같은 Process와 실행 시간이 다음과 같이 있습니다. Preemptive 방식인 Round Robin에는 한가지가 더 추가됩니다 바로 time quantum 입니다. time quantum이 지나면 다른 process에 CPU를 주게됩니다. 위의 예제에 time quantum = 2의 시간을 주고 결과를 살펴보았습니다. 평균 응답 시간..
[MicroC/OS-II] Task에 관련된 함수들에서 Task에 관한 함수들을 살펴볼 때 CPU Scheduling을 멈춘다, 시작한다 라는 언급을 했었습니다. 이번엔 그 CPU Scheduling에 대해서 알아보겠습니다. CPU Scheduling CPU Scheduling은 말 그대로 Process를 실행하는데 있어 Scheduling을 하는 것입니다. 다음의 그림을 보겠습니다. Process가 여러개 있을때 CPU는 어느 Process를 Running 해야 할까요?? 이런 문제의 답을 CPU Scheduling 이라합니다. CPU Scheduling의 형태에는 2가지의 형태가 있습니다. 그 중 하나인 Non-Preemptive에 대해서 살펴보겠습니다. 1. Non-Preemptive (비 선점방식..
Task에 관한 다른 함수들을 보시려면 다음의 게시물을 보시면 됩니다.[MicroC/OS-II] Task에 관련된 함수들 OS_TCBInit OS_TCBInit에 대해서 간단하게 살펴보겠습니다. 우선 OS_TCBInit은 Free TCB를 가져와 초기화 해준다 생각하시면 됩니다. 코드를 살펴보겠습니다. 긴 코드이지만 우선 전체를 보겠습니다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980INT8U OS_TCBInit(INT8U prio, OS_STK *ptos, OS_STK *pbos..
Task에 관련된 함수들은 다음에서 확인해 보실 수 있습니다.[MicroC/OS-II] Task에 관련된 함수들 오늘은 OSTaskStkInit에 대해서 알아보겠습니다. 코드를 보면서 찬찬히 살펴보겠습니다. OSTaskStkInit 우선 들어가는 인자부터 간단히 확인을 해보겠습니다. 1OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt)cs 1. task는 code의 address를 가르킵니다. 2. pdata는 task의 변수들이 들어갑니다. 3. ptos는 stack의 top을 가르킵니다.(stack에 아무것도 없을 경우 바닥을 가르킵니다. 4. opt는 주셔도 되고 안 주셔도 됩니다. 간단하게 인자를..
Task에 관련된 함수들은 다음에서 확인해 보실 수 있습니다.[MicroC/OS-II] Task에 관련된 함수들 앞서 OSTaskQuery에 대해서 알아보았습니다. 오늘은 Task를 생성 즉 TCB를 생성해 주는 OSTaskCreate를 알아볼 것입니다. OSTaskQuery에서 보았던 것처럼 OSTCBPrioTbl의 값도 바꿔주는지 확인해 보시면 OSTaskQuery가 좀 더 이해가 되실겁니다.OSTaskCreate OSTaskCreate를 살펴보겠습니다. 바로 코드를 보겠습니다. 123456789101112131415161718192021222324252627282930313233343536373839404142INT8U OSTaskCreate (void (*task)(void *pd), void*p..
Task에 관련된 함수들은 다음에서 확인해 보실 수 있습니다.[MicroC/OS-II] Task에 관련된 함수들 앞서 MicroC/OS-II에서 TCB에 관한 내용을 살펴보았습니다.[MicroC/OS-II] TCB Management 이제 TCB와 관련된 함수들을 살펴보겠습니다. 먼져 OSTaskQuery에 대해서 살펴보겠습니다. TCB Management에서 각각의 Task는 서로 다른 Priority를 가지고 있다고 알아보았습니다. 사용자가 어떠한 작업을 하는경우 해당 Priority가 있는지 없는지 즉, 해당 Task가 있는지 없는지 판단을 한 상태에서 작업을 수행하여야 할 것입니다. 그렇지 않으면 오류가 나겠지요!!! OSTaskQuery는 해당 Priority에 해당하는 TCB를 복사하는 역활도..
- Total
- Today
- Yesterday