ν”„λ‘œμ„ΈμŠ€(Process)λž€?

2022. 12. 12. 17:14Β·πŸ’» 개발/πŸ–₯️ 운영체제

 

반효경 κ΅μˆ˜λ‹˜μ˜ 운영체제 κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜λ©° 개인적으둜 μ°Ύμ•„ κ³΅λΆ€ν•œ λ‚΄μš©κ³Ό ν•¨κ»˜ μ •λ¦¬ν•œ λ‚΄μš©μ΄λ‹€. ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ 기본적인 λ‚΄μš©μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.

 

 

ν”„λ‘œμ„ΈμŠ€?

ν”„λ‘œμ„ΈμŠ€λž€ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ μ˜λ―Έν•œλ‹€.

그럼 ν”„λ‘œκ·Έλž¨κ³Ό ν”„λ‘œμ„ΈμŠ€μ˜ μ°¨μ΄λŠ” λ¬΄μ—‡μΌκΉŒ?

 

πŸ’‘  ν”„λ‘œκ·Έλž¨μ€ μ»΄ν“¨ν„°μ—μ„œ νŠΉμ • μž‘μ—… λ˜λŠ” μž‘μ—…μ„ μ™„λ£Œν•˜κΈ° μœ„ν•΄ μž‘μ„±λœ νŠΉμ • μ§€μΉ¨ 집합이 ν¬ν•¨λœ μ‹€ν–‰ 파일(예λ₯Ό λ“€μ–΄ exe 파일)이닀. ν”„λ‘œμ„ΈμŠ€λŠ” μ΄λŸ¬ν•œ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λœ ν™œμ„± 엔터티이닀.

 

 

 

ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯ (Process Context)

ν”„λ‘œμ„ΈμŠ€κ°€ ν˜„μ‹œμ μ—μ„œ μ–΄λ””κΉŒμ§€ μˆ˜ν–‰μ΄ λ˜μ—ˆλŠ”μ§€λ₯Ό μ•ŒκΈ° μœ„ν•œ 정보

 

πŸ—£ ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œμ— λŒ€ν•œ μ•‘μ„ΈμŠ€μ—μ„œ 제거될 λ•Œλ§ˆλ‹€ ν˜„μž¬ μž‘λ™ μƒνƒœμ— λŒ€ν•œ μΆ©λΆ„ν•œ 정보가 μ €μž₯λ˜μ–΄ ν”„λ‘œμ„Έμ„œμ—μ„œ λ‹€μ‹œ μ‹€ν–‰λ˜λ„λ‘ μ˜ˆμ•½λ  λ•Œ λ™μΌν•œ μœ„μΉ˜μ—μ„œ μž‘μ—…μ„ μž¬κ°œν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. μ΄λ•Œμ˜ μž‘λ™ μƒνƒœ 데이터λ₯Ό Process Context라 ν•œλ‹€.

 

 

ν”„λ‘œμ„ΈμŠ€ λ¬Έλ§₯은 3κ°€μ§€λ‘œ λ‚˜λ‰œλ‹€.

  1. CPU μˆ˜ν–‰ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•˜λ“œμ›¨μ–΄ λ¬Έλ§₯ (Program Counter, 각쒅 Register)
  2. ν”„λ‘œμ„ΈμŠ€μ˜ μ£Όμ†Œ 곡간 (Code, Data, Stack)
  3. ν”„λ‘œμ„ΈμŠ€ κ΄€λ ¨ 컀널 자료 ꡬ쑰 (PCB, Kernel Stack)

 

 

 

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ (Process State)

ν”„λ‘œμ„ΈμŠ€λŠ” μƒνƒœκ°€ λ³€κ²½λ˜λ©° μˆ˜ν–‰λœλ‹€. ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ ν™œλ™μ— μ˜ν•΄ μ •μ˜λ˜λ©°, 이 ν”„λ‘œμ„ΈμŠ€ μƒνƒœλŠ” Process Control Block(PCB)에 μ €μž₯λœλ‹€.

 

ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒκ³Ό 같이 5개의 μƒνƒœλ‘œ λ‚˜νƒ€λ‚Ό 수 있으며 이 쀑 ν•˜λ‚˜μ˜ μƒνƒœλ₯Ό κ°€μ§„λ‹€.

  1. New
    • ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λŠ” μƒνƒœ
  2. Ready
    • ν”„λ‘œμ„ΈμŠ€κ°€ 생성이 μ™„λ£Œλ˜λ©΄ μ€€λΉ„ μƒνƒœκ°€ 되고, ν”„λ‘œμ„ΈμŠ€λŠ” μ£Ό λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ˜κ³  CPUκ°€ ν• λ‹Ήλœλ‹€.
  3. Running
    • CPUλ₯Ό 작고 instruction을 μˆ˜ν–‰ 쀑인 μƒνƒœ (Ready Queueμ—μ„œ CPUκ°€ ν”„λ‘œμ„ΈμŠ€μ— 할당될 λ•Œλ§ˆλ‹€)
  4. Blocked (wait, sleep)
    • CPUλ₯Ό 주어도 λ‹Ήμž₯ instruction을 μˆ˜ν–‰ν•  수 μ—†λŠ” μƒνƒœ
    • ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ μ΄ μš”μ²­ν•œ 이벀트(예: I/O)κ°€ μ¦‰μ‹œ λ§Œμ‘±λ˜μ§€ μ•Šμ•„ 이λ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
      • ex) λ””μŠ€ν¬μ—μ„œ file을 읽어와야 ν•˜λŠ” 경우
  5. Terminated
    • ν”„λ‘œμ„ΈμŠ€κ°€ 싀행을 μ™„λ£Œ
    • 이 μƒνƒœ λ™μ•ˆ ν”„λ‘œμ„ΈμŠ€μ˜ PCB도 μ‚­μ œλœλ‹€.

 

 

ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ„

 

 

Process Control Block (PCB)

ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜λŠ” λ™μ•ˆ 운영 μ²΄μ œλŠ” μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹λ³„ν•˜κΈ° μœ„ν•΄ 각 ν”„λ‘œμ„ΈμŠ€μ— ν”„λ‘œμ„ΈμŠ€ 식별 번호(PID)λ₯Ό ν• λ‹Ήν•œλ‹€. μš΄μ˜ μ²΄μ œλŠ” 닀쀑 ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜λ―€λ‘œ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ₯Ό 좔적해야 ν•œλ‹€. μ΄ μž‘μ—…μ„ μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝(PCB)을 μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€μ˜ μ‹€ν–‰ μƒνƒœλ₯Ό μΆ”μ ν•œλ‹€.

 

 

PCB

μš΄μ˜μ²΄μ œκ°€ 각 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ‹Ή μœ μ§€ν•˜λŠ” 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 데이터 ꡬ쑰

 

 

λ‹€μŒμ˜ ꡬ성 μš”μ†Œλ₯Ό κ°€μ§„λ‹€.

 

  1. OSκ°€ 관리상 μ‚¬μš©ν•˜λŠ” 정보
    • 포인터(Pointer) : ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€κ°€ ν•œ μƒνƒœμ—μ„œ λ‹€λ₯Έ μƒνƒœλ‘œ μ „ν™˜λ  λ•Œ μ €μž₯ν•΄μ•Ό ν•˜λŠ” μŠ€νƒ 포인터
    • ν”„λ‘œμ„ΈμŠ€ μƒνƒœ(Process state) : ν”„λ‘œμ„ΈμŠ€μ˜ 각 μƒνƒœλ₯Ό μ €μž₯
    • ν”„λ‘œμ„ΈμŠ€ 번호(Process ID) : 각 ν”„λ‘œμ„ΈμŠ€μ—λŠ” ν”„λ‘œμ„ΈμŠ€ μ‹λ³„μžλ₯Ό μ €μž₯ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ ID( λ˜λŠ” PID)λΌλŠ” κ³ μœ ν•œ IDκ°€ ν• λ‹Ή
    • Scheduling Information, Priority
  2. CPU μˆ˜ν–‰ κ΄€λ ¨ ν•˜λ“œμ›¨μ–΄ κ°’
    • ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(Program counter) : ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•΄ 싀행될 λ‹€μŒ λͺ…λ Ήμ˜ μ£Όμ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” μΉ΄μš΄ν„°λ₯Ό μ €μž₯
    • λ ˆμ§€μŠ€ν„°(Registers) : λˆ„μ‚°κΈ°, 베이슀, λ ˆμ§€μŠ€ν„° 및 λ²”μš© λ ˆμ§€μŠ€ν„°λ₯Ό ν¬ν•¨ν•˜λŠ” CPU λ ˆμ§€μŠ€ν„°
  3. λ©”λͺ¨λ¦¬ κ΄€λ ¨
    • λ©”λͺ¨λ¦¬ μ œν•œ(Memory limits) : 운영 μ²΄μ œμ—μ„œ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ 관리 μ‹œμŠ€ν…œμ— λŒ€ν•œ 정보가 포함 (νŽ˜μ΄μ§€ ν…Œμ΄λΈ”, μ„Έκ·Έλ¨ΌνŠΈ ν…Œμ΄λΈ” 등이 포함될 수 있음)
    • Code, Data, Stack의 μœ„μΉ˜ 정보
  4. 파일 κ΄€λ ¨
    • μ—΄λ¦° 파일 λͺ©λ‘(Open files list) - 이 μ •λ³΄μ—λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ„ν•΄ μ—΄λ¦° 파일 λͺ©λ‘μ΄ 포함

 

 

 

 

λ¬Έλ§₯ κ΅ν™˜ (Context Switch)

CPUκ°€ μž‘μ—…μ΄ μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ ν•˜λ©΄μ„œ ν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ λ³€κ²½ν•˜λŠ” κ³Όμ •

CPUκ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ λ„˜μ–΄κ°ˆ λ•Œ μš΄μ˜μ²΄μ œλŠ” λ‹€μŒκ³Ό 같이 μˆ˜ν–‰ν•œλ‹€.

  1. μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€ 1의 μƒνƒœλ₯Ό PCB1에 μ €μž₯
  2. CPUλ₯Ό μƒˆλ‘­κ²Œ μ–»λŠ” ν”„λ‘œμ„ΈμŠ€ 2의 μƒνƒœλ₯Ό PCB2μ—μ„œ μ½μ–΄μ˜΄
  3. λ‹€μ‹œ μ»¨ν…μŠ€νŠΈ μ „ν™˜μ΄ λ°œμƒν•˜λ©΄ 같은 λ°©λ²•μœΌλ‘œ 이전에 μ €μž₯된 ν”„λ‘œμ„ΈμŠ€ 1을 볡원

 

 

이 κΈ°λŠ₯을 톡해 μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό κ³΅μœ ν•  수 있으며, λ©€ν‹°νƒœμŠ€ν‚Ή 운영 체제의 ν•„μˆ˜ κΈ°λŠ₯이닀.

 

 

 

λ¬Έλ§₯ κ΅ν™˜ 트리거 (Context switching triggers)

λ‹€μŒμ€ μ„Έ κ°€μ§€ μœ ν˜•μ˜ λ¬Έλ§₯ κ΅ν™˜μ΄ λ°œμƒν•˜λŠ” μ‹œκΈ°μ΄λ‹€.

  1. μΈν„°λŸ½νŠΈ : CPUκ°€ λ””μŠ€ν¬μ—μ„œ 데이터 읽기λ₯Ό μš”μ²­ν•˜κ³  μΈν„°λŸ½νŠΈκ°€ μžˆλŠ” 경우 μ»¨ν…μŠ€νŠΈ μ „ν™˜μ΄ μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ‹œκ°„μ΄ 덜 ν•„μš”ν•œ ν•˜λ“œμ›¨μ–΄ 뢀뢄을 μžλ™μœΌλ‘œ μ „ν™˜ν•œλ‹€.
  2. λ©€ν‹°νƒœμŠ€ν‚Ή : μ»¨ν…μŠ€νŠΈ μ „ν™˜μ€ ν”„λ‘œμ„ΈμŠ€κ°€ CPUμ—μ„œ μ „ν™˜λ˜μ–΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행될 수 μžˆλ„λ‘ ν•˜λŠ” λ©€ν‹°νƒœμŠ€ν‚Ήμ˜ νŠΉμ„±μ΄λ‹€. ν”„λ‘œμ„ΈμŠ€λ₯Ό μ „ν™˜ν•  λ•Œ 이전 μƒνƒœκ°€ μ €μž₯λ˜μ–΄ μ‹œμŠ€ν…œμ˜ λ™μΌν•œ μ§€μ μ—μ„œ ν”„λ‘œμ„ΈμŠ€ 싀행을 μž¬κ°œν•œλ‹€.
  3. 컀널/μ‚¬μš©μž μ „ν™˜ : 운영 μ²΄μ œμ—μ„œ μ‚¬μš©μž λͺ¨λ“œ μ „ν™˜ μ‹œ μ‚¬μš©λ˜λ©° 컀널/μ‚¬μš©μž λͺ¨λ“œκ°€ μˆ˜ν–‰λœλ‹€.

 

 

 

 

ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬(Process Scheduler)

ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λŸ¬λŠ” λ‹€μŒκ³Ό 같은 μ„Έ κ°€μ§€ λ²”μ£Όλ‘œ λ‚˜λ‰œλ‹€.

 

  1. μž₯κΈ° μŠ€μΌ€μ€„λŸ¬(Long-Term Scheduler)
    1. Job Poolμ—μ„œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ„ λ³„ν•˜κ³  싀행을 μœ„ν•΄ κΈ°λ³Έ λ©”λͺ¨λ¦¬μ˜ Ready Queue에 μ μž¬ν•œλ‹€. κ·Έλž˜μ„œ μž₯κΈ° μŠ€μΌ€μ€„λŸ¬λŠ” ‘μž‘μ—… μŠ€μΌ€μ€„λŸ¬(Job Scheduler)’라고도 ν•œλ‹€.
  2. 단기 μŠ€μΌ€μ€„λŸ¬(Short-Term Scheduler)
    1. Ready Queueμ—μ„œ ν•˜λ‚˜μ˜ μž‘μ—…(ν”„λ‘œμ„ΈμŠ€)을 μ„ νƒν•œ λ‹€μŒ 처리λ₯Ό μœ„ν•΄ CPU둜 보낸닀. κ·Έλž˜μ„œ 단기 μŠ€μΌ€μ€„λŸ¬λŠ” ‘CPU μŠ€μΌ€μ€„λŸ¬’라고도 ν•œλ‹€.

 

 

  1. 쀑기 μŠ€μΌ€μ€„λŸ¬(Medium-Term Scheduler)
    1. μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ€€λΉ„ μƒνƒœ λ˜λŠ” λŒ€κΈ°/차단 μƒνƒœλ‘œ 보내야 ν•˜λŠ” 경우(예λ₯Ό λ“€μ–΄ I/O μš”μ²­)κ°€ μžˆλ‹€. 이 μƒνƒœμ—μ„œ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ μ œκ±°ν•˜κ³  λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ„ν•œ 곡간을 λ§Œλ“€κΈ° μœ„ν•΄ μΌμ‹œ μ€‘λ‹¨λœ ν”„λ‘œμ„ΈμŠ€λ₯Ό 보쑰 μ €μž₯μ†Œλ‘œ 이동(Swap)ν•œλ‹€. μ΄λ ‡κ²Œ μŠ€μ™€ν•‘μ„ μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— ‘μŠ€μ™€ν•‘ μŠ€μΌ€μ€„λŸ¬(Swapping scheduler)’라고도 ν•œλ‹€.

 

 

 

좜처

더보기

https://www.geeksforgeeks.org/process-table-and-process-control-block-pcb/

https://www.tutorialspoint.com/what-is-context-switching-in-operating-system

 

이미지 좜처

더보기

https://techdifferences.com/difference-between-program-and-process.html

https://www.scaler.com/topics/operating-system/process-state-in-os/

https://byjus.com/gate/process-control-block-notes/

https://byjus.com/gate/process-scheduler-in-operating-system-notes/

https://www.javatpoint.com/scheduler-vs-dispatcher

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ’» 개발 > πŸ–₯️ 운영체제' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μœˆλ„μš°μ™€ λ¦¬λˆ…μŠ€μ˜ λ©€ν‹°ν”„λ‘œμ„Έμ‹± λ™μž‘ 방식 차이  (2) 2025.01.20
μΈν„°λŸ½νŠΈλŠ” 무엇이며 μ–΄λ–€ 역할을 ν• κΉŒ?  (1) 2022.11.23
'πŸ’» 개발/πŸ–₯️ 운영체제' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • μœˆλ„μš°μ™€ λ¦¬λˆ…μŠ€μ˜ λ©€ν‹°ν”„λ‘œμ„Έμ‹± λ™μž‘ 방식 차이
  • μΈν„°λŸ½νŠΈλŠ” 무엇이며 μ–΄λ–€ 역할을 ν• κΉŒ?
EastShine_
EastShine_
더 λ‚˜μ€ κ°œλ°œμžκ°€ 되기 μœ„ν•œ λ‚˜μ˜ 기둝 πŸ“
  • EastShine_
    개발.LOG πŸ’»
    EastShine_
  • 전체
    였늘
    μ–΄μ œ
  • 05-25 12:19
    • λΆ„λ₯˜ 전체보기 (27)
      • πŸ’» 개발 (21)
        • πŸ–₯️ 운영체제 (3)
        • 🌏 λ„€νŠΈμ›Œν¬ (0)
        • πŸ’Ύ Database (3)
        • πŸŽ› Java (0)
        • πŸ–² Javascript (0)
        • πŸ€ Spring (5)
        • 🎸 ETC (4)
        • πŸ“ˆ μ•Œκ³ λ¦¬μ¦˜ (3)
        • πŸ“– TIL (Today I Learned) (3)
      • 🏠 일상 (6)
        • πŸ““ 일상 일기 (6)
  • 인기 κΈ€

  • νƒœκ·Έ

    redis
    회고
    νŠΈλžœμž­μ…˜ 뢄리
    transactionaleventlistener
    Python
    6κΈ°
    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
    e-book pdf μΆ”μΆœ
    낙관적락
    Whisper API
    λŒ€κΈ°μ—΄
    λ°±μ—”λ“œ
    spring
    ν•­ν•΄ν”ŒλŸ¬μŠ€
    μ½˜μ„œνŠΈμ˜ˆμ•½μ„œλΉ„μŠ€
    λ™μ‹œμ„±μ²˜λ¦¬
    비관적락
    μ•Œκ³ λ¦¬μ¦˜
    μ½”λ”©ν…ŒμŠ€νŠΈ
    e-book pdf λ³€ν™˜
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
EastShine_
ν”„λ‘œμ„ΈμŠ€(Process)λž€?
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”