Developing Myself Everyday
article thumbnail

🏴 μ»€λ„μ΄λž€?

 

μš΄μ˜μ²΄μ œμ— 곡뢀λ₯Ό ν•˜λ‹€λ³΄λ©΄ μ»€λ„μ΄λΌλŠ” 것을 μ ‘ν•˜κ²Œ λœλ‹€ 컀널을 κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•˜μžλ©΄ 운영체제의 λ©”λͺ¨λ¦¬μ— 상주해 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ΄λΌκ³  ν•  수 μžˆλ‹€.

 

 

컀널은 응응 ν”„λ‘œκ·Έλž¨λ“€μ΄ μžμ›μ— μ ‘κ·Όν•  λ•Œ μ‚¬μš©λ˜λŠ”λ°, 이 λ•Œ μœ„μ˜ κ·Έλ¦Όκ³Ό 같은 과정을 거치게 λœλ‹€.

 

μ‰˜μ΄λž€ 이런 ν”„λ‘œκ·Έλž¨λ“€μ΄ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ˜κ³  μ–Έμ œ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλ˜λŠ”μ§€ κ΄€λ¦¬ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€. λ‹€λ§Œ μ‰˜μ΄ 직접 λ©”λͺ¨λ¦¬μ— κ΄€μ—¬ν•œλ‹€λ©΄ μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨λ“€μ΄ 꼬이게 λ˜μ–΄ μ—‰λš±ν•œ 곳에 데이터λ₯Ό μ½κ±°λ‚˜ μ“°λŠ” 상황이 λ°œμƒν•  수 μžˆλ‹€. κ·Έλž˜μ„œ μ‰˜μ€ I/Oλ₯Ό ν•  λ•Œ μ»€λ„μ—κ²Œ μš”μ²­μ„ ν•˜κ³  컀널은 이λ₯Ό λ°›μ•„λ“œλ € ν•΄λ‹Ήν•˜λŠ” I/Oλ₯Ό λŒ€μ‹  진행해쀀닀. 이런 μš”μ²­μ„ System Call (μ‹œμŠ€ν…œ 콜)이라고 ν•œλ‹€.

 

이 λ•Œ μ‚¬μš©λ˜λŠ” 것이 μœ„μ˜ κ·Έλž¨μ— μ‘΄μž¬ν•˜λŠ” mode bit 이닀. mode bitλŠ” μ•„λž˜μ™€ 같은 2κ°€μ§€μ˜ λͺ¨λ“œκ°€ μžˆλ‹€.

 

 mode bit 0 : μœ μ € λͺ¨λ“œ

 mode bit 1 : 컀널 λͺ¨λ“œ

 

λ§Œμ•½ mode bitκ°€ 1둜 컀널 λͺ¨λ“œλΌλ©΄ I/Oλ₯Ό 진행할 수 있고 0으둜 μœ μ € λͺ¨λ“œλΌλ©΄ I/OλŠ” κ±°λΆ€λ˜κ²Œ λœλ‹€.


 

 

 

컀널은 λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œμ—μ„œ μ‚¬μš©λ˜λŠ”λ° μ•ˆλ“œλ‘œμ΄λ“œλŠ” λ¦¬λˆ…μŠ€λ₯Ό 기반으둜 ν–ˆκΈ° λ•Œλ¬Έμ— μš°λ¦¬κ°€ μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•  λ•Œ λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜λ €λ©΄ λ°”λ‘œ 컀널을 톡해야 ν•œλ‹€. 

 

 

그럼 이제 ꢁ금증이 생겼닀. μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ JVM을 톡해 μš΄μ˜μ²΄μ œμ™€ μƒν˜Έμž‘μš©ν•œλ‹€. JVM은 μ–΄λ–»κ²Œ, μ–΄λ””μ„œ μš΄μ˜μ²΄μ œμ™€ μƒν˜Έμž‘μš©ν•˜κ³  μžˆλŠ”κ°€ ❓

μ΄μ œλΆ€ν„° 이λ₯Ό μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

 

 

JVM에 λ‚΄λΆ€ ꡬ쑰와 μž‘λ™μ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 μ•„λž˜μ˜ κ²Œμ‹œκΈ€μ— μžˆλ‹€.

 

JVM의 λ‚΄λΆ€ ꡬ쑰와 μž‘λ™

μžλ°”μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” JVMμ—μ„œ μ‹€ν–‰λ˜λŠ” 독립적인 μ‹€ν–‰ ν”„λ‘œκ·Έλž¨μ΄λ‹€. μžλ°” ν”„λ‘œμ„ΈμŠ€λŠ” 운영 μ²΄μ œμ—μ„œ μ‹€ν–‰λ˜κΈ° μœ„ν•΄ μžμ›μ„ ν• λ‹Ήλ°›κ³ , λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©ν•˜λ©°, μ‹œμŠ€ν…œ μžμ›μ„ ν™œμš©ν•˜μ—¬ μž‘μ—…μ„ 수

everyday-develop-myself.tistory.com


 

 

 

JVM의 μ‹œμŠ€ν…œ 콜


JVM의 λ‚΄λΆ€ κ΅¬μ‘°λŠ” μ•„λž˜ 그림의 큰 μ‚¬κ°ν˜•κ³Ό κ°™λ‹€. λ‹€ μ•Œν•„μš”λŠ” μ—†κ³  μ‹œμŠ€ν…œ μ½œμ— μ‚¬μš©λ˜λŠ” λΆ€λΆ„λ§Œ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

 

 

 

1️⃣ λ©”λͺ¨λ¦¬ 접근이 ν•„μš”ν•œ λ©”μ„œλ“œμ˜ λ°œμƒ

 

 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ JVM은 ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ ν˜ΈμΆœμ„ μœ„ν•΄ JVM μŠ€νƒμ— ν”„λ ˆμž„μ„ μŒ“κ²Œ λœλ‹€. JVM μŠ€νƒμ€ μžλ°” λ©”μ†Œλ“œ 호좜의 μ‹€ν–‰ μ»¨νƒμŠ€νŠΈλ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λœλ‹€. 

 

λ§Œμ•½ 싀행쀑인 λ©”μ†Œλ“œκ°€ μ‹œμŠ€ν…œ 콜, 즉 λ©”λͺ¨λ¦¬ 접근이 ν•„μš”ν•œ λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œλΌλ©΄ 이 λ•Œ λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œλŠ” λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œ μŠ€νƒμ— 적재되게 λœλ‹€. λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œ μŠ€νƒμ€ λ„€μ΄ν‹°λΈŒ μ½”λ“œμ˜ μ‹€ν–‰ μ»¨νƒμŠ€νŠΈλ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

 

2️⃣ μ‹œμŠ€ν…œ 콜 μš”μ²­

JVM은 JNI(JVM Native Interface)λ₯Ό 톡해 Native Method Library(λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œ 라이브러리)λ₯Ό ν˜ΈμΆœν•΄ ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰ν•œλ‹€. 이 λ•Œ, λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œκ°€ μš΄μ˜μ²΄μ œμ— μ ‘κ·Όν•΄μ•Ό ν•  경우, λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œλŠ” μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜μ—¬ μš΄μ˜μ²΄μ œμ—κ²Œ ν•΄λ‹Ή κΈ°λŠ₯을 μš”μ²­ν•œλ‹€. μ‹œμŠ€ν…œ μ½œμ€ 컀널 λͺ¨λ“œλ‘œ μ „ν™˜λ˜μ–΄ μ‹€ν–‰λ˜λ©°, μš΄μ˜μ²΄μ œλŠ” μš”μ²­λœ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œλ‘œ λ°˜ν™˜ν•œλ‹€. 이후 λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œλŠ” JVM으둜 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κ³ , JVM은 μžλ°” ν”„λ‘œκ·Έλž¨μ— ν•΄λ‹Ή κ²°κ³Όλ₯Ό μ „λ‹¬ν•˜κ²Œ λœλ‹€.

 

 

 

 

λ”°λΌμ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”μ†Œλ“œ μ‹€ν–‰ μ€‘μ—λŠ” JVM μŠ€νƒμ— μŒ“μ΄λ‹€κ°€ μ‹œμŠ€ν…œ 콜이 ν•„μš”ν•œ λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œκ°€ 호좜될 경우, ν•΄λ‹Ή λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œλŠ” λ„€μ΄ν‹°λΈŒ λ©”μ†Œλ“œ μŠ€νƒμ— 적재되고 JVM은 컀널 λͺ¨λ“œλ‘œ μ „ν™˜ν•˜μ—¬ μš΄μ˜μ²΄μ œμ— μ‹œμŠ€ν…œ μ½œμ„ μš”μ²­ν•œλ‹€. 

'Android > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Reflection (λ¦¬ν”Œλ ‰μ…˜)  (0) 2023.06.11
JVM의 λ‚΄λΆ€ ꡬ쑰와 μž‘λ™  (0) 2023.06.10
JVM & JRE & JDK  (0) 2023.05.29
profile

Developing Myself Everyday

@λ°°μ€€ν˜•

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!