Seungjae Lee 2022. 9. 7. 22:34

μ£Όμš”μš©μ–΄

  1. 큐 : ν•œμͺ½μ—μ„œλŠ” μ‚½μž…μ΄ λ°œμƒν•˜κ³  λ‹€λ₯Έ ν•œμͺ½μ—μ„œλŠ” μ‚­μ œκ°€ λ°œμƒν•˜λ„λ‘ μ •μ˜λ˜μ—ˆμœΌλ©°, λ¨Όμ € μ‚½μž…λœ μ›μ†Œκ°€ λ¨Όμ € μ‚­μ œλ˜λ―€λ‘œ μ„ μž… μ„ μΆœ(First-In-First-Out: FIFO) λ˜λŠ” μ„ μ°©μˆœ μ„œλΈŒ(First-Come-First-Serve: FCFS) μ•Œκ³ λ¦¬μ¦˜μ„ κ°–λŠ” μˆœμ„œ 리슀트
  2. 큐의 μ•ž(front) : μ›μ†Œμ˜ μ‚­μ œμ—°μ‚°μ΄ μ΄λ£¨μ–΄μ§€λŠ” κ³³
  3. 큐의 λ’€(rear) : μ›μ†Œμ˜ μ‚½μž…μ—°μ‚°μ΄ μ΄λ£¨μ–΄μ§€λŠ” κ³³
  4. FCFS(First-Come First-Served) μŠ€μΌ€μ€„λ§(λ˜λŠ” FIFO μŠ€μΌ€μ€„λ§) : μž‘μ—…(ν”„λ‘œκ·Έλž¨)이 μ€€λΉ„ 큐에 λ„μ°©ν•œ μˆœμ„œλŒ€λ‘œ CPUλ₯Ό 할당받도둝 ν•΄ μ£ΌλŠ” 기법
  5. RR(Round Robin) μŠ€μΌ€μ€„λ§ 기법 : μž‘μ—…μ΄ λ„μ°©ν•œ μˆœμ„œλŒ€λ‘œ CPUκ°€ ν• λ‹Ήλ˜μ§€λ§Œ, CPU의 μ‹œκ°„ ν• λ‹ΉλŸ‰ λ˜λŠ” μ‹œκ°„ 간격에 μ˜ν•΄ μ œν•œμ„ λ°›μœΌλ©°, μΌμ •ν•œ 크기의 μ‹œκ°„ ν• λ‹ΉλŸ‰μ„ λͺ¨λ“  μž‘μ—…μ—κ²Œ μ£Όκ³  κ·Έ μ‹œκ°„λ™μ•ˆ μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ λͺ»ν•˜λ©΄ μ€€λΉ„ 큐의 맨 뒀에 λ‹€μ‹œ λ°°μΉ˜λ˜λŠ” 기법
  6. μ›ν˜• 큐 : νŒŒμ΄ν”„μ˜ μž…κ΅¬μ™€ 좜ꡬ 뢀뢄을 μ—°κ²°μ‹œν‚¨ ν˜•νƒœμ΄λ©°, 큐의 μ–‘ 끝을 μ—°κ²°μ‹œμΌœμ„œ μ›μœΌλ‘œ λ§Œλ“  ν˜•νƒœμ˜ 큐

큐의 의미

  • ν•œμͺ½μ—μ„œλŠ” μ‚½μž…μ—°μ‚°λ§Œ λ°œμƒ κ°€λŠ₯ν•˜κ³ , λ‹€λ₯Έ ν•œμͺ½μ—μ„œλŠ” μ‚­μ œμ—°μ‚°λ§Œ λ°œμƒ κ°€λŠ₯ν•œ μ–‘μͺ½μ΄ λͺ¨λ‘ ν„°μ§„ κ΄€
  • ν•œμͺ½μ—μ„œλŠ” μ‚½μž…μ—°μ‚°: μ„œλΉ„μŠ€λ₯Ό λ°›κΈ° μœ„ν•œ κΈ°λ‹€λ¦Ό
  • λ‹€λ₯Έ ν•œμͺ½μ—μ„œλŠ” μ‚­μ œμ—°μ‚°: μ„œλΉ„μŠ€λ₯Ό λ°›λŠ” 쀑

큐의 μ‚½μž…μ—°μ‚°

  • μ‚½μž… 연산이 λ°œμƒν•˜λ©΄ rear λ³€μˆ˜λ§Œ 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™ν•˜κ³ , μ‚­μ œ 연산이 λ°œμƒν•˜λ©΄ front λ³€μˆ˜λ§Œ 였λ₯Έμͺ½μœΌλ‘œ 이동함

μ›ν˜•νμ˜ 초기 μƒνƒœ

  • λ°°μ—΄μ˜ λ©”λͺ¨λ¦¬κ°€ λ‚­λΉ„λ˜λŠ” λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ›ν˜•νκ°€ μ œμ•ˆλ¨
  • μ›ν˜• νλŠ” νŒŒμ΄ν”„μ˜ μž…κ΅¬μ™€ 좜ꡬ 뢀뢄을 μ—°κ²°μ‹œν‚¨ ν˜•νƒœ

μ •λ¦¬ν•˜κΈ°

  1. νλŠ” ν•œμͺ½μ—μ„œλŠ” μ‚½μž…μ΄ λ°œμƒν•˜κ³  λ‹€λ₯Έ ν•œμͺ½μ—μ„œλŠ” μ‚­μ œκ°€ λ°œμƒν•˜λ„λ‘ μ •μ˜λ˜μ—ˆμœΌλ©°, λ¨Όμ € μ‚½μž…λœ μ›μ†Œκ°€ λ¨Όμ € μ‚­μ œλ˜λ―€λ‘œ μ„ μž… μ„ μΆœ(First-In-First-Out : FIFO) λ˜λŠ” μ„ μ°©μˆœ μ„œλΈŒ(First-Come-First-Serve : FCFS) μ•Œκ³ λ¦¬μ¦˜μ„ κ°–λŠ” μˆœμ„œ 리슀트라고 ν•©λ‹ˆλ‹€.
  2. νμ—μ„œλŠ” μ›μ†Œμ˜ μ‚­μ œμ—°μ‚°μ΄ μ΄λ£¨μ–΄μ§€λŠ” 곳을 μ•ž(front)이라 ν•˜κ³  μ‚½μž…μ—°μ‚°μ΄ μ΄λ£¨μ–΄μ§€λŠ” 곳을 λ’€(rear)라고 ν•©λ‹ˆλ‹€.
  3. 큐 생성 ν•¨μˆ˜(Create_q(maxQueueSize))λ₯Ό ν˜ΈμΆœν•˜κΈ°λ§Œ ν•˜λ©΄ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ§€μ •ν•œ 크기의 μƒˆλ‘œμš΄ 큐λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. Create_q(maxQueueSize) ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μΈ maxQueueSizeλŠ” 큐가 μ €μž₯ν•  수 μžˆλŠ” μ΅œλŒ€ 개수의 μ›μ†Œ(element)λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  4. Boolean IsFull_q(queue, maxQueueSize) 연산은 큐가 가득 μ°ΌλŠ”μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 즉, 큐에 μ €μž₯된 μ›μ†Œ(element)의 κ°œμˆ˜κ°€ maxQueueSize와 κ°™λ‹€λ©΄, κ·Έ νλŠ” 가득 찼으며 큐에 자료(μ›μ†Œ)λ₯Ό 더 이상 μ €μž₯μ‹œν‚¬ 수 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
  5. Queue Add_q(queue, item) 연산은 큐에 μƒˆλ‘œμš΄ μ›μ†Œλ₯Ό μ‚½μž…ν•©λ‹ˆλ‹€. 만일 큐가 가득 μ°Όλ‹€(Full)λ©΄ 더 μ΄μƒμ˜ μ›μ†Œλ₯Ό 큐에 μ‚½μž…ν•  수 μ—†μœΌλ©°, ‘queueFull‘ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  6. Boolean IsEmpty(queue) 연산은 큐 μƒνƒœκ°€ 빈 μƒνƒœμΈμ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 만일 큐가 빈 μƒνƒœμ΄λ©΄ ‘TRUE’ 값을 λ°˜ν™˜ν•˜κ³ , 큐에 ν•˜λ‚˜μ΄μƒμ˜ μ›μ†ŒλΌλ„ μžˆλ‹€λ©΄ ‘FALSE’ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  7. Element Delete_q(queue) μ—°μ‚°μžλŠ” 큐가 빈 μƒνƒœλΌλ©΄ μ‚­μ œν•  μ›μ†Œκ°€ μ—†μœΌλ―€λ‘œ ‘queueEmpty‘λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 빈 μƒνƒœκ°€ μ•„λ‹ˆλΌλ©΄ μ‚­μ œν•  μ›μ†Œκ°€ μžˆμœΌλ―€λ‘œ, 큐의 frontκ°€ κ°€λ¦¬ν‚€λŠ” μ›μ†Œλ₯Ό μ‚­μ œν•˜κ³  κ·Έ μ›μ†Œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  8. 큐의 μΆ”μƒμžλ£Œν˜•μ—μ„œ μ •μ˜λœ 연산은 μ‹œμŠ€ν…œ κ°œλ°œμžμ— 따라 λ‹€λ₯΄κ²Œ μ •μ˜λ˜κ³  κ΅¬ν˜„λ  μˆ˜λ„ 있고, 컴파일러 μ„€κ³„μžμ— 따라 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ‹€λ₯΄κ²Œ 제곡될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  9. μ›ν˜•νλŠ” νŒŒμ΄ν”„μ˜ μž…κ΅¬μ™€ 좜ꡬ 뢀뢄을 μ—°κ²°μ‹œν‚¨ ν˜•νƒœμž…λ‹ˆλ‹€. μ—°κ²°λœ λΆ€λΆ„μ˜ 데이터 곡간을 μ—°μ†μ μœΌλ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ‘λ‚˜λ¨Έμ§€ μ—°μ‚°μž‘λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.