week11 junghyunlyoo process - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

ν”„λ‘œμ„ΈμŠ€μ˜ 생성

ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 되렀면 즉 ν”„λ‘œμ„ΈμŠ€κ°€ 생성 되렀면 ν”„λ‘œμ„Έμ„œ 점유 μ‹œκ°„, λ©”λͺ¨λ¦¬, 파일, μž…μΆœλ ₯μž₯치 같은 μžμ›μ΄ ν•„μš”ν•˜λ‹€.

ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜κ±°λ‚˜ 싀행될 λ•Œ 이 μžμ›λ“€μ΄ ν”„λ‘œμ„ΈμŠ€μ— ν• λ‹Ήν•œλ‹€. λ˜ν•œ ν˜„μž¬μ˜ ν™œλ™ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(PC), ν”„λ‘œμ„Έμ„œμ˜ ν˜„μž¬ ν™œλ™(λ ˆμ§€μŠ€ν„° λ‚΄μš©)도 ν”„λ‘œμ„ΈμŠ€ 내뢀에 ν¬ν•¨λœλ‹€.

ν”„λ‘œμ„ΈμŠ€λŠ” μ•„λž˜μ™€ 같이 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό 이룬닀.

  • μŠ€νƒμ€ ν˜ΈμΆœν•œ ν•¨μˆ˜μ˜ λ°˜ν™˜ μ£Όμ†Œ, λ°˜ν™˜ κ°’, λ§€κ°œλ³€μˆ˜, μ§€μ—­λ³€μˆ˜ λ“±μ˜ 데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜λŠ” μ˜μ—­μ΄λ‹€.

  • νž™μ€ λ‹€λ₯Έ μ˜μ—­κ³ΌλŠ” λ³„λ„λ‘œ μœ μ§€λ˜λŠ” 자유 μ˜μ—­μ΄λ‹€. λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν–ˆλ‹€κ°€ ν•΄μ œν•˜λŠ” λ°©λ²•μœΌλ‘œ ν™œμš©ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€μ˜ 곡유 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λ™μ μœΌλ‘œ 적재된 λͺ¨λ“ˆμ΄ μ„œλ‘œ κ³΅μœ ν•˜λŠ”λ°, 동적 λ©”λͺ¨λ¦¬ 할당이 λ°œμƒν•˜λ©΄ μŠ€νƒμ˜μ—­ μͺ½μΈ μœ„μͺ½μœΌλ‘œ 컀진닀.

  • λ°μ΄ν„°λŠ” ν”„λ‘œκ·Έλž¨μ˜ 가상 μ£Όμ†Œ 곡간이닀. μ „μ—­λ³€μˆ˜λ‚˜ μ •μ λ³€μˆ˜λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ ν• λ‹Ήν•˜κ³  μ‹€ν–‰ν•˜κΈ° 전에 μ΄ˆκΈ°ν™”ν•œλ‹€. 읽기와 μ“°κΈ°κ°€ κ°€λŠ₯ν•œ μ˜μ—­μ΄λ‹€.

  • μ½”λ“œλŠ” μ‹€ν–‰ λͺ…령을 ν¬ν•¨ν•˜λŠ” λ©”λͺ¨λ¦¬μ΄λ‹€. ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•  λ•Œ ν”„λ‘œμ„Έμ„œκ°€ λ””μŠ€ν¬μ—μ„œ 읽어 μ‹€ν–‰ν•˜λŠ” 컴파일된 ν”„λ‘œκ·Έλž¨μ„ μ €μž₯ν•œλ‹€. 읽기 μ „μš© μ˜μ—­μ΄κΈ° λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ΄ μ½”λ“œ μ˜μ—­μ„ μΉ¨λ²”ν•˜μ—¬ μ“°κΈ°λ₯Ό μ‹œλ„ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•œλ‹€.

μ΄λ ‡κ²Œ ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜λ©°, ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ› μ˜μ—­μ— μ ‘κ·Όν•  수 μ—†λ‹€. λ§Œμ•½ ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ νŒŒμ΄ν”„, 파일, μ†ŒμΌ“ λ“±μ˜ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신(IPC)을 μ‚¬μš©ν•΄μ•Όν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 변화와 μƒνƒœ 정보

μƒνƒœλ³€ν™” ν‘œκΈ°λ°©λ²•
μ€€λΉ„->μ‹€ν–‰ dispatch
μ‹€ν–‰->μ€€λΉ„ timeout
μ‹€ν–‰->λŒ€κΈ° block
λŒ€κΈ°->μ€€λΉ„ wakeup
μ€€λΉ„->μ‹€ν–‰ 
μ€€λΉ„ 큐 맨 μ•žμ— 있던 ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œλ₯Ό μ μœ ν•˜λŠ” 것을 dispatch라고 ν•œλ‹€.
닀쀑 ν”„λ‘œκ·Έλž˜λ° μš΄μ˜μ²΄μ œμ—μ„œλŠ” μ‹€ν–‰ μƒνƒœμΈ ν”„λ‘œμ„ΈμŠ€κ°€ ν• λ‹Ήλœ CPU 점유 μ‹œκ°„λ§ŒνΌλ§Œ ν”„λ‘œμ„Έμ„œλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μ—¬ νŠΉμ • ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œλ₯Ό 계속 λ…μ ν•˜λŠ” 것을 λ°©μ§€ν•œλ‹€. 

μ‹€ν–‰->μ€€λΉ„ 
μš΄μ˜μ²΄μ œλŠ” μ‹€ν–‰ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ CPUλ₯Ό 계속 λ…μ ν•˜μ§€ μ•Šλ„λ‘ μΈν„°λŸ½νŠΈ 클둝을 두어 νŠΉμ • ν”„λ‘œμ„ΈμŠ€κ°€ ν• λ‹Ήλœ CPU점유 μ‹œκ°„λ™μ•ˆλ§Œ ν”„λ‘œμ„Έμ„œλ₯Ό μ μœ ν•˜κ²Œ ν•œλ‹€. 
ν”„λ‘œμ„ΈμŠ€κ°€ 일정 μ‹œκ°„μ΄ μ§€λ‚˜λ„ ν”„λ‘œμ„Έμ„œλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ©΄ 클둝이 μΈν„°λŸ½νŠΈλ₯Ό λ°œμƒμ‹œμΌœ μš΄μ˜μ²΄μ œμ— ν”„λ‘œμ„Έμ„œ μ œμ–΄κΆŒμ„ λΆ€μ—¬ν•˜κ²Œ λœλ‹€.
그러면 μ‹€ν–‰ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€λŠ” μ€€λΉ„ μƒνƒœκ°€ 되고, μ€€λΉ„ 리슀트의 첫 번째 ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰ μƒνƒœκ°€ λœλ‹€.

μ‹€ν–‰->λŒ€κΈ° 
ν• λ‹Ήλœ μ‹œκ°„ 이전에 μ‹€ν–‰ μƒνƒœμ˜ ν”„λ‘œμ„ΈμŠ€μ— μž…μΆœλ ₯ μ—°μ‚° 등이 ν•„μš”ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ μžμ› μš”μ²­ λ“±μ˜ 문제둜 ν”„λ‘œμ„Έμ„œλ₯Ό 슀슀둜 μ–‘λ„ν•˜λ©΄ λŒ€κΈ° μƒνƒœκ°€ λœλ‹€. 

λŒ€κΈ°->μ€€λΉ„ 
λŒ€κΈ°μ€‘μ΄μ—ˆλ˜ ν”„λ‘œμ„ΈμŠ€λŠ” μΈν„°λŸ½νŠΈλ₯Ό λ°œμƒμ‹œν‚¨ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ λŒ€κΈ°μ—μ„œ μ€€λΉ„ μƒνƒœκ°€ λœλ‹€.

ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝(PCB, Process Control Block)

μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ–΄ν•  λ•Œ ν•„μš”ν•œ ν”„λ‘œμ„ΈμŠ€ μƒνƒœ μ •λ³΄λŠ” ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝에 μ €μž₯λœλ‹€.

ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝은 ν”„λ‘œμ„ΈμŠ€κ°€ 생성될 λ•Œ λ§ˆλ‹€ μƒμ„±λœλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λ©΄ λ©”λͺ¨λ¦¬μ— PCBλ₯Ό μƒμ„±ν•˜κ³ , ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ PCB도 μ‚­μ œν•œλ‹€. PCB에 λ“€μ–΄μžˆλŠ” 정보듀을 μ•„λž˜μ™€ κ°™λ‹€.

정보 μ„€λͺ…
ν”„λ‘œμ„ΈμŠ€ μ‹λ³„μž 각 ν”„λ‘œμ„ΈμŠ€μ˜ 고유 μ‹λ³„μž
ν”„λ‘œμ„ΈμŠ€ μƒνƒœ 생성, μ€€λΉ„, μ‹€ν–‰, λŒ€κΈ°, 쀑단 λ“± μƒνƒœν‘œμ‹œ
ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(PC) ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ” λ‹€μŒ λͺ…λ Ήμ–΄μ˜ μ£Όμ†Œ
λ ˆμ§€μŠ€ν„° μ €μž₯ μ˜μ—­ λˆ„μ‚°κΈ°, 인덱슀 λ ˆμ§€μŠ€ν„°, μŠ€νƒ 포인터, λ²”μš© λ ˆμ§€μŠ€ν„°, 쑰건 μ½”λ“œ λ“±μ˜ 정보. μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°μ™€ ν•¨κ»˜ μ €μž₯ν•˜μ—¬ μž¬μ‹€ν–‰ν•  λ•Œ μ›λž˜λŒ€λ‘œ 볡귀할 수 있게 ν•œλ‹€.
ν”„λ‘œμ„Έμ„œ μŠ€μΌ€μ€„λ§ 정보 ν”„λ‘œμ„ΈμŠ€μ˜ μš°μ„ μˆœμœ„, μŠ€μΌ€μ€„λ§ 큐의 포인터, 기타 μŠ€μΌ€μ€„ λ§€κ°œλ³€μˆ˜
계정정보 ν”„λ‘œμ„Έμ„œ μ‚¬μš© μ‹œκ°„, μ‹€μ œ μ‚¬μš©μ‹œκ°„, μ‚¬μš© μƒν•œ μ‹œκ°„, 계정 번호, μž‘μ—…μ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€ 번호 λ“±