μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- μ½λμ
- udp
- tcp
- datepicker
- Python
- μ΄λ Έν μ΄μ
- uri
- Dialog
- νλ IT&E
- swagger
- reflection
- Kotlin
- OpenAPI
- κ°μ²΄μ§ν₯νλ‘κ·Έλλ°
- menutab
- di
- Factory Method Pattern
- Android Studio
- url
- μ±μ©νμ ν
- fontstyle
- FACTORY
- URN
- 2024-08-21
- http method
- OOP
- κΈ°μ΄100μ
- AndroidStudio
- 2024-08-20
- IOC
dingdong coding
[ OS ] νλ‘μΈμ€μ μ€λ λ Process, Thread λ³Έλ¬Έ
[ OS ] νλ‘μΈμ€μ μ€λ λ Process, Thread
πΆ κ°λ°κ°λ° πΎ 2022. 7. 12. 01:561 ) νλ‘μΈμ€ Process
In computing, a process is the instance of a computer program that is being executed by one or many threads.
μ»΄ν¨ν° λΆμΌμμ νλ‘μΈμ€λ μ»΄ν¨ν° νλ‘κ·Έλ¨μ μΈμ€ν΄μ€λ‘, νλ μ΄μμ μ€λ λλ₯Ό ν΅ν΄ μ€νλλ€.
- μν€ -
νλ‘μΈμ€λ₯Ό νλ§λλ‘ μ μνλ©΄ μ€ν μ€μΈ νλ‘κ·Έλ¨ (A program in execution) μ λλ€.
μ¦, νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ¬λΌμ μ€νλκ³ μλ λ₯λμ μΈ μ‘΄μ¬μ λλ€. μ΄λ μ μμ μΈ μ€νμ μν΄ μ΄μ체μ λ‘λΆν° CPU(μμ€ν μμ)λ₯Ό ν λΉλ°μ μ€νλ©λλ€.
- νλ‘κ·Έλ¨: μ΄λ€ μμ μ νκΈ° μν΄ μ€νν μ μλ νμΌ λλ νλ‘κ·Έλ¨ (μ μ μΈ μν)
- νλ‘μΈμ€: λ©λͺ¨λ¦¬μ μ μ¬λκ³ CPU μμμ ν λΉλ°μ νλ‘κ·Έλ¨μ΄ μ€νλκ³ μλ μν
1-1 ) νλ‘μΈμ€μ λ©λͺ¨λ¦¬ ꡬμ±μμ
1 ) μ½λ(Code) μμ
: νλ‘κ·Έλ¨μ μ½λ μμ²΄λ‘ μ€νν νλ‘κ·Έλ¨μ μ½λ λ° λ§€ν¬λ‘ μμκ° κΈ°κ³μ΄ ννλ‘ μ μ₯λλ μμμ λλ€.
2 ) λ°μ΄ν°(Data) μμ
: νλ‘κ·Έλ¨μ μ μ λ³μ(global variable)λ μ μ λ³μ(static variable)μ ν λΉμ μν΄ μ‘΄μ¬νλ 곡κ°μΌλ‘ νλ‘κ·Έλ¨μ μμκ³Ό ν¨κ» ν λΉλμ΄ μ’ λ£λ λ μλ©Έλ©λλ€.
3 ) μ€ν(Stack) μμ
: μ§μ λ³μ(local variable) ν λΉκ³Ό ν¨μ νΈμΆ μ μ λ¬λλ μΈμ(argument) κ°μΌλ‘ ν¨μ μμμ μ μΈλ μ§μλ³μ, 맀κ°λ³μ, λ¦¬ν΄ κ° λ±μ΄ μ μ₯λκ³ ν¨μ νΈμΆ μ κΈ°λ‘, μ’ λ£λλ©΄ μ κ±°λ©λλ€. ( μμ λ©λͺ¨λ¦¬ )
4 ) ν(Heap)μμ
: λμ λ©λͺ¨λ¦¬ μμμΌλ‘ κ΄λ¦¬ κ°λ₯ν λ°μ΄ν° μΈμ λ€λ₯Έ ννμ λ°μ΄ν°λ₯Ό κ΄λ¦¬νκΈ° μν 곡κ°μ λλ€. ( new(), malloc() )
λν OSλ‘ μ¬λ¬ Processλ₯Ό μ€ν, κ΄λ¦¬ν μ μλλ° μ΄λ₯Ό λ©ν°ν μ€νΉ μ΄λΌκ³ ν©λλ€.
* λ©ν°ν μ€νΉ *
OSλ‘ CPUκ° μμ νλλ° νμν μμμ νλ‘μΈμ€ λλ μ€λ λ κ° λλλ νμμ λλ€. μ΄λ₯Ό ν΅ν΄ μ¬λ¬ μμ© νλ‘κ·Έλ¨μ λμμ μ΄κ³ μμ ν μ μμ΅λλ€. νμ§λ§ CPUλ ν λ²μ νκ°μ§ λͺ λ Ήμ΄λ§ μ²λ¦¬ν μ μκΈ° λλ¬Έμ μ΄λ λμκ° μλ Context Switching μ ν΅ν΄ νλ‘μΈμ€λ₯Ό λ²κ°μ μ€ννκ³ κ΄λ¦¬νλ κ²μ λλ€.
* Context Switching *
CPUκ° νμ¬ μμ μ€μΈ νλ‘μΈμ€μμ λ€λ₯Έ νλ‘μΈμ€λ‘ λμ΄κ° λ μ§κΈκΉμ§μ νλ‘μΈμ€μ μνλ₯Ό μ μ₯(PCB)νκ³ , μ νλ‘μΈμ€μ μ μ₯λ μνλ₯Ό λ€μ μ μ¬νλ μμ μ Context SwitchλΌ ν©λλ€. μ΄ λ Context Switchingμ CPU μμμ ν λΉνλ Scheulerμ μν΄ λ°μν©λλ€.
1-2 ) νλ‘μΈμ€ νΉμ§
- νλ‘μΈμ€λ λ 립λ λ©λͺ¨λ¦¬ μμ(Code, Data, Stack, Heapμ ꡬ쑰), μ£Όμ곡κ°, CPU μκ°μ ν λΉλ°μ΅λλ€.
- ν΄λΉ νλ‘μΈμ€μ μ 보λ₯Ό λ΄κ³ μλ PCB(Process Control Block)κ° λ§λ€μ΄μ§λλ€.
- κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€λΉ μ΅μ 1κ°μ μ€λ λλ₯Ό κ°μ§κ³ μμ΅λλ€.
- κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μμ μ€νλκ³ νλ‘μΈμ€λΌλ¦¬λ μμμ 곡μ νμ§ μμ΅λλ€.
- ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμμ μ κ·Όνλ €λ©΄ νλ‘μΈμ€ κ°μ ν΅μ (IPC, inter-process communication)μ΄ νμν©λλ€. ex ) λ©μΌ μ¬λ‘―, νμ΄ν, μμΌ, μκ·Έλ, 곡μ λ©λͺ¨λ¦¬
* PCB (Process Control Block) *
νλ‘μΈμ€μ λν μ λ³΄λ‘ νλ‘μΈμ€ μμ± μμ λ§λ€μ΄μ§λ κ²μ λλ€.
* PCBμ ꡬ쑰 *
- νλ‘μΈμ€ λ²νΈ (Process Identification Number, PID) : νλ‘μΈμ€μ κ³ μ λ‘ ν μ μ λ²νΈμ΄λ©° λ€λ₯Έ νλ‘μΈμ€μμ ꡬλ³μ μν΄ μ¬μ©ν©λλ€.
- νλ‘μΈμ€μ μν (Status) : μ€λΉ, μ€ν, λκΈ°, 보λ₯ λ±μ μν
- νλ‘μΈμ€ μ°μ μμ (Priority) : μ€μΌμ€λ§μ ν λ μ¬μ©λλ μ°μ μμ
- νλ‘κ·Έλ¨ μΉ΄μ΄ν°(Program Counter,PC) : λ€μμ μ€νλ λͺ λ Ήμ΄μ μ£Όμ κ°
- λ©λͺ¨λ¦¬ ν¬μΈν° : νλ‘κ·Έλ¨κ³Ό λ°μ΄ν°κ° μ μ₯λμ΄ μλ λ©λͺ¨λ¦¬ λΈλ‘ μμΉμ, 곡μ λλ λ©λͺ¨λ¦¬ λΈλ‘λ€μ λν ν¬μΈν°
- λ¬Έλ§₯ λ°μ΄ν° : λ¬Έλ§₯ κ΅ν μμ CPU λ μ§μ€ν° κ°λ€μ μ μ₯νλ μμ
- ν λΉλ°μ μμλ€μ λν λͺ©λ‘ : κ°λ°©(Open)ν νμΌ λ± ν λΉλ°μ μμλ€μ μ 보
- κ³μ μ 보 (Accounting Information) : CPUλ₯Ό μ¬μ©ν μκ° λ±μ μ 보
- μ μΆλ ₯ μ 보 : μ§ν μ€μΈ μ μΆλ ₯ μꡬ λ±μ μ 보
1-3 ) νλ‘μΈμ€ μν
1. μμ±(Created)
: μ¬μ©μκ° μμ²ν μμ μ΄ μ»€λμ λ±λ‘λκ³ PCBκ° λ§λ€μ΄μ Έ νλ‘μΈμ€κ° λ§λ€μ΄μ§ λ€μ μ€λΉλ 보λ₯ μ€λΉ μνλ‘ λκΈ° μν΄ μ μ κ±°μΉλ μν
: νλ‘μΈμ€λ₯Ό μμ±ν ν λ©λͺ¨λ¦¬ 곡κ°μ κ²μ¬νμ¬ μΆ©λΆν 곡κ°μ΄ μμΌλ©΄ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ©΄μ μ€λΉ μνλ‘ λ°κΎΈμ΄μ£Όκ³ , κ·Έλ μ§ λͺ»ν κ²½μ° λ³΄λ₯ μ€λΉ μν
2. μ€λΉ(Ready)
: CPUλ₯Ό ν λΉλ°κΈ° μν΄ κΈ°λ€λ¦¬κ³ μλ μν
: CPUλ§ μ£Όμ΄μ§λ©΄ λ°λ‘ μ€νν μ€λΉκ° λμ΄ μλ μν
3. μ€ν(Running)
: CPUλ₯Ό ν λΉλ°μ μ€ν μ€μΈ μν
: CPUλ₯Ό ν λΉνλ κ²μ λμ€ν¨μΉ(Dispatch)λΌκ³ ν¨
4. λκΈ°(Blocked)
: νλ‘μΈμ€κ° μ€νλλ€κ° μ μΆλ ₯ μ²λ¦¬λ₯Ό μμ²νκ±°λ, λ°λ‘ ν보λ μ μλ μμμ μμ²νλ©΄ CPUλ₯Ό μλνκ³ μμ²ν μΌμ΄ μλ£λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©΄μ λκΈ°νλ μν
5. μ’ λ£(Terminated)
: νλ‘μΈμ€κ° μ’ λ£λ λ μμ£Ό μ μ κ±°μΉλ μν
: νλ‘μΈμ€λ ν λΉλμλ λͺ¨λ μμλ€μ΄ νμλκ³ PCBλ§ μ»€λμ λ¨μμλ μν
6. 보λ₯ μ€λΉ(Suspended Ready)
: μμ±λ νλ‘μΈμ€κ° λ°λ‘ λ©λͺ¨λ¦¬λ₯Ό λ°μ§ λͺ»ν λλ, μ€λΉ λλ μ€ν μνμμ λ©λͺ¨λ¦¬λ₯Ό μκ² λ λλ₯Ό μν΄ νμ
: μ€ν μνμ νλ‘μΈμ€κ° CPUλ₯Ό λ°λ©νλ©΄μ μ€λΉ μνλ‘ λ°λ λ λ©λͺ¨λ¦¬ 곡κ°κΉμ§ μμ΄μΌ νλ κ²½μ°λΌλ©΄ 보λ₯ μ€λΉ μνλ‘ λ°λκ²(Suspended) λ¨
7. 보λ₯ λκΈ°(Suspended Blocked)
: λκΈ° μνμΌ λ λ©λͺ¨λ¦¬ 곡κ°μ μμ μν
2 ) μ€λ λ Thread
In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system
μ»΄ν¨ν° λΆμΌμμ μ€νλλ μ€λ λλ μΌλ°μ μΌλ‘ μ΄μ체μ μ μΌλΆμΈ μ€μΌμ€λ¬μ μν΄ λ 립μ μΌλ‘ κ΄λ¦¬ λ μ μλ νλ‘κ·Έλλ° λ λͺ λ Ήμ΄μ κ°μ₯ μμ μνμ€
- μν€ -
μ€λ λλ νλ‘μΈμ€ μμμ μ€νλλ μ¬λ¬ νλ¦ λ¨μλ‘ νλ‘μΈμ€λ§λ€ μ΅μ 1κ°μ μ€λ λλ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
λν μ€λ λλ νλ‘μΈμ€ λ΄μμ μ€νλλ νλ¦μΌλ‘ νλ‘μΈμ€ μμμ 곡μ ν©λλ€.
- νλ‘μΈμ€ λ΄μ μ£Όμ 곡κ°μ΄λ μμλ€ κ³΅μ ν©λλ€.
- ν νλ‘μΈμ€ λ΄μμ λμνλ μ¬λ¬ μ€νμ νλ¦μ λλ€.
- μ€λ λλ νλ‘μΈμ€ λ΄μμ Stackλ§ λ°λ‘ ν λΉλ°κ³ Code, Data, Heap μμμ 곡μ ν©λλ€
- κ°μ νλ‘μΈμ€ μμ μ¬λ¬ μ€λ λλ€μ μλ‘ κ³΅μ κ°λ₯νμ§λ§ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μλ μ§μ μ κ·Όν μ μμ΅λλ€.
μ¦, μλ‘ λ 립μ μΈ μΌλ€μ λΆνμνκ² μμ°¨μ μΌλ‘ μννλ μ¬μ€μ κ°μ νκΈ° μν΄ νλ‘μΈμ€λ³΄λ€ μκ³ λ 립μ μΌλ‘ μ€μΌμ€λ§μ΄ κ°λ₯ν μ€λ λλΌλ κ°λ μ΄ λμ λ κ²μ λλ€.
- νλ‘μΈμ€ : μ 체μ μΈ νλμ μΌ / κ³ μ 곡κ°κ³Ό μμμ ν λΉλ°μ μ¬μ©
- μ€λ λ : μΈλΆλ μμ μΌ / λ€λ₯Έ μ€λ λμ 곡κ°, μμμ 곡μ νλ©° μ¬μ©
νμ΅μ λ§μ λμμ΄ λ λ§ν¬λ₯Ό μ°Έμ‘°νμ΅λλ€. π
μ°Έμ‘° λ° μΆμ²
[OS] νλ‘μΈμ€(Process)μ μ€λ λ(Thread) μ°¨μ΄ (λ©ν° νλ‘μΈμ€, λ©ν° μ€λ λ)
'πWeb & Network' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ Web, Network ] κ΄λ ¨ μ©μ΄ μ 리 ( κ°μΈ νμ΅μ© ) (0) | 2022.07.13 |
---|---|
Monolithic Architecture, Micro Service Architecture (0) | 2022.06.27 |
RESTful API (0) | 2022.06.15 |
HTTP Method (0) | 2022.04.09 |
HTTP (0) | 2022.03.27 |