β
1. νμ κ°λ
(1) νμ μλ―Έ
- μμ
νμ λ€μ΄κ° μμ
μ΄ κ°μ₯ μ²μμ μ²λ¦¬λλ μμ
μ€μΌμ€μ μλ―Ένλ€.
- μ½κ²λ§ν΄, λ€μ΄κ° μμλλ‘ νλμ© μμλλ‘ μ²λ¦¬νλ λ°©μμ μλ―Έν¨.
- νμͺ½μμλ μ½μ
μ°μ°λ§ λ°μ κ°λ₯νκ³ , λ€λ₯Έ νμͺ½μμλ μμ μ°μ°λ§ λ°μ κ°λ₯ν μμͺ½μ΄ λͺ¨λ ν°μ§ κ΄
- νμͺ½μμλ μ½μ
μ°μ°: μλΉμ€λ₯Ό λ°κΈ° μν κΈ°λ€λ¦Ό
- λ€λ₯Έ νμͺ½μμλ μμ μ°μ°: μλΉμ€λ₯Ό λ°λ μ€
- μ μ
μ μΆ(FIFO:First-In-First-Out) λλ μ μ°©μ μλΈ(FCFS:First-Come-First-Serve) μκ³ λ¦¬μ¦κ³Ό ν¨κ» μ¬μ©λ¨
(2) νμ μ μ
β
2. νμ μΆμ μλ£ν
(1) νμ κ°μ²΄ μ μ
- νμ μΆμμλ£ν
- ν κ°μ²΄: 0κ° μ΄μμ μμλ₯Ό κ°λ μ ν μμ 리μ€νΈ
(2) νμ μ°μ°
- νμ μ(front): μμμ μμ μ°μ°μ΄ μ΄λ£¨μ΄μ§λ κ³³
- νμ λ€(rear): μμμ μ½μ
μ°μ°μ΄ μ΄λ£¨μ΄μ§λ κ³³
- item μ νμ λ€μ΄κ° κ°μ μλ―Ένλ€.
(3) νμ μ½μ
(Add_q) μ°μ°
- νμ μ½μ
쑰건μΌλ‘ full μ¬λΆλ₯Ό νμ
ν λ€ full μ΄ μλλ©΄ rear μ item μμλ₯Ό μ½μ
(4) νμ μμ (Delete_q) μ°μ°
- νκ° λΉμ΄μλμ§ μ¬λΆλ₯Ό μ²΄ν¬ ν λ€, νμ front μ μλ μμλ₯Ό μμ νκ³ λ°νμ νλ€.
(5) λΉ ν κ²μ¬(IsEmpty_q) μ°μ°
(6) νμ λ§μ κ²μ¬(IsFull_q) μ°μ°
(7) Add/Delete μ°μ°μ μ€ν
- (1) Create_q(4): 4κ°μ Q 곡κ°μ λ§λ λ€.
- (2) Add_q(queue, 'A'): νμ A κ°μ μ½μ
ν΄λΉ λΆλΆμ rear ν¬μΈν° λΆλΆμ΄ λ¨. ( front λ νμ λμΌ -1 μμΉ )
- (3) Add_q(queue, 'B'): νμ B κ° μ½μ
rear ν¬μΈν° μ΄λ
- (4) Add_q(queue, 'C'): νμ C κ° μ½μ
rear ν¬μΈν° μ΄λ
- (5) Delete_q(queue): front κ° μ΄λνλ©΄μ, μ μΌ λ¨Όμ λ€μ΄μ¨ Aλ₯Ό μμ λ° λ°ν
- (6) Delete_q(queue): front μ΄λ λ€μ B μμ λ° λ°ν
- (7) Delete_q(queue): front μ΄λ λ€μ C μμ λ° λ°ν
- (8) Add_q(queue, 'D'): νμ C κ° μ½μ
rear ν¬μΈν° μ΄λ
- 8λ² μ΄ν λ§μ½ 'E' λ₯Ό μ½μ
νκ² λλ©΄ rear κ° λ°°μ΄μ λμ λλ¬νκΈ° λλ¬Έμ λ μ΄μ λ€λ‘ μ΄λν μ μκ²λ¨.
- λ°λΌμ ν λ§μ μνλ‘ μΈμλμ΄ eλ₯Ό μ½μ
ν μ μκ² λλ€.
(8) λ°°μ΄ κΈ°λ° νμ λ¬Έμ μ
- μμ μμμ κ°μ΄ μΌλ°μ μΈ λ°°μ΄ κΈ°λ° νμ λ¬Έμ μ μ front μ rear ν¬μΈν°κ° μμΌλ‘ λ€μ λμκ°λκ²μ΄ λΆκ°λ₯νμ¬ κ³΅κ°μ μ¬νμ©νμ§ λͺ»νλ μ¬κ°ν λΉν¨μ¨μ΄ λ°μνλ©°, μ΄κ²μ νμ μ€λ²νλ‘(Overflow) λΌκ³ λΆλ₯΄κΈ°λ νλ€.
- μ΄κ²μ ν΄κ²°νκΈ° μν΄ μν ν λΌλ μλ£κ΅¬μ‘°κ° μ¬μ©λκΈ°λ ν¨.
- λ°λΌμ, μν νμ λ°°μ΄ νλ νμ μΆμ μλ£νμ 곡ν΅λ μ°μ°μΈ νμ μ½μ
, μμ , λΉ ν κ²μ¬, λ§μ ν κ²μ¬ μ°μ°μ 곡ν΅μ μΌλ‘ ꡬννλ λ΄μ©μ΄λ©° λ°°μ΄ νμ μν νλ ν΄λΉ 곡ν΅λ μ°μ°μ μλ‘ λ€λ₯Έ λ°©μμΌλ‘ ꡬννκ² λλ€.
β
3. νμ μμ©
(1) CPUμ κ΄λ¦¬ λ°©λ²
FCFS λΉμ μ μ€μΌμ€λ§ κΈ°λ²
- FCFS(First-Come First-Served) μ€μΌμ€λ§ κΈ°λ²μ μμ
(νλ‘κ·Έλ¨)μ΄ μ€λΉ νμ λμ°©ν μμλλ‘ CPUλ₯Ό ν λΉλ°κ³ μμ
μ΄ μλ£λ λκΉμ§ CPUλ₯Ό μ¬μ©νλ κΈ°λ²μ΄λ€. ( ν΄λΉ λ°©λ²μ κΈ΄ μκ°μ μμ
μ΄ μ€λ CPUλ₯Ό μ μ νλ λΆκ³΅νν¨μ΄ μμ. )
Round Robin μ€μΌμ€λ§ κΈ°λ²
- RR(Round Robin) μ€μΌμ€λ§ κΈ°λ²μ λνν μμ€ν
μ μ ν©νλ©°, μΌμ μκ°(time slice)λ§ CPUλ₯Ό μ¬μ©νλ μ€μΌμ€λ§ λ°©μ
- μ½κ²λ§ν΄, νμ λμ°©ν μμλλ‘ CPU ν λΉμ ν΄μ£Όκ³ μ ν΄μ§ μκ° λ§νΌλ§ νλ‘μΈμ€μκ² CPUλ₯Ό ν λΉν΄μ€λ€. μ΄ν, μ ν΄μ§ μκ°μ λ²μ΄λλ μμ
μ λ¨μ μκ°μ κ°μ§μ± νμ 맨 λ€λ‘ λ€μ λ€μ΄κ°κ² λλ λ°©μμ΄λ€.
(2) κ²°λ‘
- μ΄μ체μ κ° CPU ν λΉ μ¦, μ€μΌμ€λ§μ κ΄λ¦¬ν λ λλΆλΆμ κΈ°λ²μ Queue μλ£κ΅¬μ‘°λ₯Ό νμ©νκ³ μλ€.
β
4. λ°°μ΄μ μ΄μ©ν νμ ꡬν
- νμ μΆμμλ£νμ κ°μ§κ³ ꡬννλ λ°©μμΌλ‘, λ°°μ΄μ μ΄μ©ν λ°©μμΌλ‘ 보면 λλ€.
- μ½μ
κ³Ό μμ μ λν μΆμμλ£νμ ꡬννλ€κ³ 보면λ¨.
(1) νμ μμ±
- λ³μ rearμ μ΄κΈ°κ°μ νμ 곡백 μνλ₯Ό λνλ΄λ '-1'λ‘ μμμ νλ€.
(2) νμ μ΄κΈ° μν
(3) νμ μ½μ
μ°μ°
// C
void Add_q(element item) {
if(rear == QUEUE_SIZE-1) {
printf("Queue is full !!");
return;
}
queue[++rear] = item;
return;
}
- μ½μ
μ°μ°μ΄ λ°μνλ©΄ rear λ³μλ§ μ€λ₯Έμͺ½μΌλ‘ μ΄λνκ³ , μμ μ°μ°μ΄ λ°μνλ©΄ front λ³μλ§ μ€λ₯Έμͺ½μΌλ‘ μ΄λμ ν¨.
- QUEUE_SIZE λ νμ ν λΉ λ 곡κ°μ κ°μ μλ―Ένλ©°, -1μ νλ μ΄μ λ λ°°μ΄μ μΈλ±μ€λ 0λΆν° μμνκΈ° λλ¬Έμ.
- rear μ μμΉκ° λ§μ½ λ°°μ΄μ λ§μ§λ§ λΆλΆ μ¦, μ¬μ΄μ¦λ₯Ό λμ΄μ°κΈ° λλ¬Έμ κ½μ°Όλ€κ³ μλ €μ£Όλ λ‘μ§μ.
(4) νμ μμ μ°μ°
// C
element Delete_q() {
if(front == rear) {
printf("Queue is empty");
return;
}
return(queue[++(front)]);
}
- μμ μ°μ°μ μν κ²°κ³Όλ‘ μμ λ μμλ₯Ό Delete_q μ°μ°μμ νΈμΆ νλ‘κ·Έλ¨μκ² λ°ν
β
5. μν ν
- νμ μΆμμλ£νμ΄ μ μν κ·μΉμ μΆ©μ€ν λ°λ₯΄λ©΄μ, λ°°μ΄μ΄λΌλ ꡬ체μ μΈ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©ν΄ ν¨μ¨μ μΌλ‘ ꡬννλ λ°©λ²
- κΈ°μ‘΄μ λ°°μ΄ κΈ°λ° ν(μ ν ν)κ° κ°μ§ λ©λͺ¨λ¦¬ λλΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κ³ μλ κ²μ΄λ€.
- μ ν νλ λ°°μ΄μ 맨 μμμ μμλ₯Ό μμ νκ³ , 맨 λ€μμ μμλ₯Ό μ½μ
νλλ° μ΄λ μμλ₯Ό μμ νκ³ λλ©΄ λ°°μ΄μ μλΆλΆμ λΉ κ³΅κ°μ΄ μκΈ°λλ° μ΄ κ³΅κ°μ μ¬μ¬μ©λμ§ μκ³ κ·Έλλ‘ λ²λ €μ§κ² λλ€.
- μ¦, μλ‘μ΄ μμλ νμ λ°°μ΄μ λ€μͺ½μλ§ μΆκ°κ° λκ² λλ λ¬Έμ μ λ°μμ΄ λλλ°, μ΄κ²μ΄ λ©λͺ¨λ¦¬ λλΉμ μ§κ²°μ΄ λλ€.
(1) νμ λΉ μνμ μ½μ
μν
- μΌλ°μ μΈ νμμλ rear μ front μ μμΉκ° κ²ΉμΉκ² λ λ νκ° λΉμ΄μλ€κ³ νλ¨μ΄ λλ€.
(2) νμ λ§μ μν
- μΌλ°μ μΈ νμμλ QueueSize - 1 == rear 쑰건μ ν΅ν΄μ Queue κ° λ§μμνμΈμ§ μ μ μμ.
- νμ§λ§ μλμ κ°μ case μμλ Queue 0 μΈλ±μ€μ κ°μ΄ μ¬λΌμ Έ μλ μνμ΄μ§λ§ λμΌνκ² λ§μμνλ‘ λ³΄κ² λ¨.
- μ¦, front λ₯Ό ν΅ν΄ λΉμ΄μ§ 곡κ°μ μ¬μ©μ ν μ μμμλ μ¬μ©μ ν μ μλ μνκ° λλ²λ¦Ό ( λ©λͺ¨λ¦¬ λλΉ )
(3) μν νμ μ΄κΈ° μν
- λ°°μ΄λ‘ ꡬνν νμ λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ μν νκ° μ μμ΄ λμμ.
- μν νλ νμ΄νμ μ
ꡬμ μΆκ΅¬ λΆλΆμ μ°κ²°μν¨ ννλ₯Ό μλ―Ένλ€.
(4) μν νμ μν λ³ν
- Queue delete -> front μ μμΉ 0λ² μΈλ±μ€λ‘ μ΄λ
- rear μ νμ¬ μμΉλ 4λ² μΈλ±μ€
- Queue delete -> front μ μμΉ 1λ² μΈλ±μ€λ‘ μ΄λ
- rear μ νμ¬ μμΉλ 4λ² μΈλ±μ€
- μ€λ₯Έμͺ½μ λ°°μ΄ κΈ°λ°μΌ κ²½μ° rear μ΄λ μ¦, μ½μ
μ΄ λ μ΄μ λΆκ°λ₯ν¨.
(5) μν νμ μ½μ
μ°μ° κ²°κ³Ό
- μ°κ²°λ λΆλΆμ λ°μ΄ν° 곡κ°μ μ°μμ μΌλ‘ μ¬μ©νκΈ° μν΄ 'λλ¨Έμ§ μ°μ°μ' μ νμ©ν¨.
- λͺ¨λλ‘ μ°μ°μ νμ©ν΄ νμ¬ μ΄λ―Έμ§μ ν ν¬κΈ°μΈ 5κ°κ³Ό μΈλ±μ€ 4 + 1 ν κ²°κ³Όκ° 5
- νμ¬ μ΄λ―Έμ§μ ν ν¬κΈ°μΈ 5κ°κ³Ό νμ¬ rear μμΉμ μΈλ±μ€κ° λ§μ§λ§ μΈλ±μ€ 4μΈ κ²½μ°μλ 4 + 1μ νμ¬, 5μ 5λ₯Ό λͺ¨λλ‘ μ°μ°μ ν΅ν΄ λμ¨ κ°μΈ 0μ λ€μ μΈλ±μ€λ‘ μ°κ² λλ©΄μ ν΄λΉ μΈλ±μ€μ κ°μ λ£μ μ μκ² λλ€.
- μ¦, μ΄λ¬ν λ°©μμ μ΄μ©νλ©΄ λμΌνκ² rear μ frontκ° λ§λλ μ§μ μ΄ κ²°κ΅μ νκ° κ½μ°¨ μλ κ²½μ° λλ λΉμ΄μλ μνμμ μ μ μκ² λλ€. μ΄ λμ ꡬλ³μ μΉ΄μ΄νΈ λ³μλ₯Ό ν΅ν΄ μ½μ
μ count 1 μ¦κ° λλ μμ μ count 1 κ°μλ₯Ό ν΅ν΄ ꡬλ³μ΄ κ°λ₯νλ€. μ΄ λΏλ§ μλλΌ ν¬μΈν°λ₯Ό νμ©ν΄μλ κ°λ₯
(6) μ 리
- ν μΆμμλ£νμ ν΅ν΄ λ°°μ΄λ‘ ꡬνμ ν΄λ΄€λλ, λ°°μ΄λ‘ ꡬνν λ°©μμ ν deleteλ‘ μ¬λΌμ§ κ³΅κ° μ¦, μμ 곡κ°μ΄ λ¨μ μλ€λ κ²μ μμλ λ μ΄μ μ½μ
μ΄ λΆκ°λ₯νμ§λ§, μν νμ μ°μ°μ ν΅ν΄ ν΄κ²°μ΄ κ°λ₯νμ. μ΄κ²μ ꡬνμ λͺ¨λλ‘ μ°μ°μ ν΅ν΄ λλ¨Έμ§μ κ°μ μΈλ±μ€λ‘μ¨ νμ©ν¨μΌλ‘μ¨ κ°λ₯ν΄μ§.