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

μ»€λ„μ΄λž€ 운영체제 λ‚΄λΆ€μ—μ„œ μžμ›λ“€μ„ κ΄€λ¦¬ν•˜κ³  좔상화 ν•΄μ€€λ‹€. 이 덕뢄에 μ‚¬μš©μžλŠ” λ‚΄λΆ€ ν•˜λ“œμ›¨μ–΄μ— 직접 μ ‘κ·Όν•˜μ§€ μ•Šκ³ λ„ κ°„νŽΈν•˜κ²Œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 μžˆλ‹€. μ—¬κΈ°μ„œ μžμ›μ€ CPU, λ©”λͺ¨λ¦¬ , μž…μΆœλ ₯ μž₯치 같은 것듀을 λ‚˜νƒ€λ‚Έλ‹€.

 

λ˜ν•œ 컀널은 μžμ›μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ κ΄€λ¦¬μžλ“€μ΄ μžˆλ‹€.

  1. ν…ŒμŠ€νŠΈ κ΄€λ¦¬μž : 물리적 μžμ›μΈ CPUλ₯Ό 좔상 μžμ›μΈ ν…ŒμŠ€ν¬λ‘œ μ œκ³΅ν•œλ‹€.
  2. λ©”λͺ¨λ¦¬ κ΄€λ¦¬μž : 물리적 μžμ›μΈ λ©”λͺ¨λ¦¬λ₯Ό 좔상 μžμ›μΈ νŽ˜μ΄μ§€λ‚˜ μ„Έκ·Έλ¨ΌνŠΈλ‘œ μ œκ³΅ν•œλ‹€.
  3. 파일 μ‹œμŠ€ν…œ κ΄€λ¦¬μž : 물리적 μžμ›μΈ λ””μŠ€ν¬λ₯Ό 좔상 μžμ›μΈ νŒŒμΌλ‘œ μ œκ³΅ν•œλ‹€.
  4. λ„€νŠΈμ›Œν¬ κ΄€λ¦¬μž : 물리적 μžμ›μΈ λ„€νŠΈμ›Œν¬ μž₯치λ₯Ό 좔상 μžμ›μΈ μ†ŒμΌ“μœΌλ‘œ μ œκ³΅ν•œλ‹€.
  5. λ””λ°”μ΄μŠ€ λ“œλΌμ΄λ²„ κ΄€λ¦¬μž : κ°μ’… μ™ΈλΆ€ μž₯치(ν”„λ¦°ν„°, GPU λ“±)에 λŒ€ν•œ 접근을 μ œκ³΅ν•œλ‹€.

 

μ»€λ„μ˜ λ™μž‘ 방식

컀널은 Memory Resident ν•œ ν”„λ‘œκ·Έλž¨μ΄λ‹€. 일반적으둜 ν”„λ‘œκ·Έλž¨λ“€μ€ λ””μŠ€ν¬μ— μƒμ£Όν•΄μžˆλŠ”λ°, 컀널은 λ©”λͺ¨λ¦¬μ—μ„œ μ—¬λŸ¬ λͺ…령듀을 μ²˜λ¦¬ν•œλ‹€. 

ν•˜μ§€λ§Œ 컀널은 μ‚¬μš©μžμ˜ λͺ…령을 μ§μ ‘μ μœΌλ‘œ λ°›μ§€ μ•Šκ³  μ‰˜μ΄λž€ ν”„λ‘œκ·Έλž¨μ„ ν†΅ν•΄μ„œ λͺ…령을 μ „λ‹¬λ°›λŠ”λ‹€. 즉 μ‰˜μ„ ν†΅ν•΄μ„œ μ»€λ„μ—κ²Œ λͺ…령을 내릴 수 μžˆλŠ” 것이닀.

 

μ‰˜μ˜ μ—­ν• 

ν”„λ‘œκ·Έλž¨λ“€μ΄ μ–Έμ œ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ˜κ³  ν•΄μ œλ˜λŠ”μ§€ κ΄€λ¦¬ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€. μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨λ“€μ˜ λ©”λͺ¨λ¦¬λ₯Ό 관리해주며 μ»€λ„μ˜ 쀑간닀리 역할을 μˆ˜ν–‰ν•˜κΈ°λ„ ν•œλ‹€.

 

좜처 : https://medium.com/pocs/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%95%EC%9D%98%EB%85%B8%ED%8A%B8-1-d36d6c961566

 

일반적으둜 μš΄μ˜μ²΄μ œκ°€ λΆ€νŒ…λ˜λ©΄ Memory Residentν•œ νŠΉμ„±μ„ κ°€μ§€λŠ” 컀널이 λ¨Όμ € λ©”λͺ¨λ¦¬μ— μ˜¬λΌμ˜¨λ‹€.

κ·Έ ν›„ μœ μ €κ°€ 터미널을 μ‹€ν–‰ν•˜λ©΄ μ‰˜μ΄ λ©”λͺ¨λ¦¬μ— 올라였고 μœ μ €κ°€ μž…λ ₯ν•œ μ»€λ§¨λ“œμ— λ§žλŠ” 작(job)을 λ©”λͺ¨λ¦¬μ— μ˜¬λ¦°λ‹€.

이런 κ³Όμ •μœΌλ‘œ μœ μ €λŠ” ν”„λ‘œκ·Έλž¨μ„ 내뢀적인 ꡬ쑰λ₯Ό μ‹ κ²½μ“°μ§€ μ•Šκ³  μ‹€ν–‰μ‹œν‚¬ 수 μžˆλŠ” 것이닀.

 

ν•˜μ§€λ§Œ 이런 λ¦¬λˆ…μŠ€ ν™˜κ²½μ€ 신경써야 ν•  점이 ν•˜λ‚˜ μžˆλ‹€. λ°”λ‘œ λ©€ν‹°μœ μ € μ‹œμŠ€ν…œμ΄λΌλŠ” 점이닀.

μœˆλ„μš°λŠ” 개인pc용 μš΄μ˜μ²΄μ œμ—¬μ„œ λ³΄μ•ˆμ— λŒ€ν•œ 뢀담이 λ¦¬λˆ…μŠ€μ— λΉ„ν•΄ 적을 수 μžˆμ§€λ§Œ, μ—¬λŸ¬ μ‚¬μš©μžκ°€ μ΄μš©ν•˜λŠ” λ¦¬λˆ…μŠ€λŠ” λ³΄μ•ˆμ„ νŠΉλ³„νžˆ 더 μ‹ κ²½μ¨μ•Όν•œλ‹€.

λ§Œμ•½ μœ μ €Aκ°€ μœ μ €B의 νŒŒμΌμ— λ§˜λŒ€λ‘œ μ ‘κ·Όν•  수 μžˆλ‹€λ©΄ μ–΄λ–¨κΉŒ? μ΄λŠ” μ‹¬κ°ν•œ 문제λ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€. 

λ”°λΌμ„œ μš΄μ˜μ²΄μ œλŠ” 컀널λͺ¨λ“œμ™€ μœ μ €λͺ¨λ“œλ₯Ό λ‚˜λˆ„μ–΄μ„œ μž…μΆœλ ₯ μž‘μ—… 같이 μžμ›μ— μ ‘κ·Όν•˜λŠ” 일듀은 μ»€λ„μ—μ„œ λ‹΄λ‹Ήν•˜λ„λ‘ ν•˜μ˜€λ‹€.

μ΄λ•Œ μ»€λ„μ—κ²Œ ν•΄λ‹Ή μž‘μ—…μ„ μš”μ²­ν•˜λŠ” 것을 μ‹œμŠ€ν…œ 콜이라고 ν•œλ‹€.

μœ μ € λͺ¨λ“œμ—μ„œ μ‹œμŠ€ν…œ μ½œμ΄λ‚˜ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜κ²Œ 되면 컀널 λͺ¨λ“œλ‘œ μ§„μž…ν•œλ‹€.

 

μ‹œμŠ€ν…œ 콜의 μ’…λ₯˜λŠ” λ‹€μŒκ³Ό 같은 역할듀을 μˆ˜ν–‰ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€/μŠ€λ ˆλ“œ κ΄€λ ¨ 처리

파일 I/O κ΄€λ ¨ 처리

μ†ŒμΌ“ κ΄€λ ¨ 처리

λ””λ°”μ΄μŠ€ κ΄€λ ¨ 처리

ν”„λ‘œμ„ΈμŠ€ 톡신 κ΄€λ ¨ 처리

 

λ¬Όλ‘  λͺ¨λ“  μ»€λ§¨λ“œμ— λŒ€ν•΄μ„œ μ‹œμŠ€ν…œ 콜이 μ»€λ„λ‘œ λͺ…령을 전달해주면 μ΄λŠ” λ¬΄μš©μ§€λ¬ΌμΌ 것이닀. κ·Έλž˜μ„œ ν•΄λ‹Ή λͺ…령이 μ ν•©ν•œ λͺ…령인지λ₯Ό νŒλ‹¨ν•˜λŠ” λ°”μ΄λ„ˆλ¦¬ λΉ„νŠΈλ₯Ό CPU에 λ‘λŠ”λ°, 이λ₯Ό mode bit라고 ν•œλ‹€. 1이면 컀널λͺ¨λ“œ 0이면 μœ μ €λͺ¨λ“œλΌκ³  μ•Œλ €μ Έμžˆλ‹€.

컀널λͺ¨λ“œμ—μ„œλŠ” λͺ¨λ“  μžμ›μ— λŒ€ν•œ 접근이 κ°€λŠ₯ν•œλ° μ΄λ•Œ I/O 같은 μž‘μ—…λ“€μ„ μˆ˜ν–‰ν•˜κ³  μ‹œμŠ€ν…œ 콜의 λ¦¬ν„΄κ°’μœΌλ‘œ ν•΄λ‹Ή μž‘μ—…μ— λŒ€ν•œ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. 그리고 ν•΄λ‹Ή μž‘μ—…μ΄ μ’…λ£Œλ˜λ©΄ λ‹€μ‹œ μœ μ €λͺ¨λ“œλ‘œ λŒμ•„κ°€μ„œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€. 이 μž‘μ—…μ΄ ν•œλ²ˆλ§Œ μ§„ν–‰λ˜λŠ” 건 μ•„λ‹ˆκ³  ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄μ„œ μˆ˜μ—†μ΄ 컀널λͺ¨λ“œμ™€ μœ μ €λͺ¨λ“œλ₯Ό μ™”λ‹€κ°”λ‹€ν•œλ‹€.

 

μΈν„°λŸ½νŠΈλž€

μ•žμ„œ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•˜μ˜€μ„ λ•Œ 컀널 λͺ¨λ“œλ‘œ μ§„μž…ν•œλ‹€κ³  ν•˜μ˜€λ‹€. 이 λ•Œ μΈν„°λŸ½νŠΈλŠ” 무엇이고 μ™œ λ°œμƒν• κΉŒ? 

μΈν„°λŸ½νŠΈλŠ” μ‹œμŠ€ν…œμ—μ„œ λ°œμƒν•œ λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ 이벀트 ν˜Ήμ€ 그런 μ΄λ²€νŠΈλ“€μ΄ λ°œμƒν–ˆμ„ λ•Œ μ•Œλ €μ£ΌλŠ” λ©”μ»€λ‹ˆμ¦˜μ΄λ‹€.

μΈν„°λŸ½νŠΈλ“€μ΄ λ°œμƒν•˜λ©΄ CPUμ—μ„œλŠ” μΈν„°λŸ½νŠΈ 처리λ₯Ό μœ„ν•΄ 컀널 λͺ¨λ“œλ‘œ μ§„μž…ν•œλ‹€.

ν•˜λ“œμ›¨μ–΄ ν˜Ήμ€ ν”„λ‘œκ·Έλž¨μ΄ μΈν„°λŸ½νŠΈ 라인에 μΈν„°λŸ½νŠΈλ₯Ό μ„ΈνŒ…ν•˜λ©΄ μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•œλ‹€. μ΄λ•Œ μΈν„°λŸ½νŠΈ 벑터λ₯Ό 톡해 μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μ‹€ν–‰ν•΄μ„œ μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•œλ‹€.

 

μΈν„°λŸ½νŠΈ 벑터

μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴(ν•Έλ“€λŸ¬)의 μ£Όμ†Œλ₯Ό λ‹΄κ³  μžˆλŠ” ν…Œμ΄λΈ”

μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴

μ‹€μ œ μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 루틴

 

참고둜 ν”„λ‘œκ·Έλž¨ λ ˆλ²¨μ—μ„œ λ°œμƒν•˜λŠ” μΈν„°λŸ½νŠΈλŠ” 트랩이라고 뢈리며 ν•˜λ“œμ›¨μ–΄ μΈν„°λŸ½νŠΈλ³΄λ‹€ μš°μ„  μˆœμœ„κ°€ λ†’λ‹€.

 

μ™ΈλΆ€ μΈν„°λŸ½νŠΈ

전원에 λ¬Έμ œκ°€ 생겼을 λ•Œ

I/O μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ

타이머 μ‹œκ°„μ΄ 끝났을 λ•Œ

 

λ‚΄λΆ€ μΈν„°λŸ½νŠΈ

0으둜 λ‚˜λˆ΄μ„ λ•Œ

잘λͺ»λœ λ©”λͺ¨λ¦¬ 곡간에 접근을 μ‹œλ„ν•  λ•Œ

 

μ†Œν”„νŠΈμ›¨μ–΄ μΈν„°λŸ½νŠΈ

ν”„λ‘œκ·Έλž¨ 처리 쀑 λͺ…λ Ήμ˜ μš”μ²­μ— μ˜ν•΄ λ°œμƒν•˜λŠ” 데, λŒ€ν‘œμ μœΌλ‘œ SVC에 μ˜ν•œ call이 μžˆλ‹€.

 

μΈν„°λŸ½νŠΈλŠ” λ‹€μŒκ³Ό 같은 μš°μ„  μˆœμœ„λ₯Ό κ°€μ§„λ‹€.

  1. 전원 이상(Power fail)
  2. 기계 착였(Machine Check)
  3. μ™ΈλΆ€ μ‹ ν˜Έ(External)
  4. μž…μΆœλ ₯(I/O)
  5. λͺ…λ Ήμ–΄ 잘λͺ»
  6. ν”„λ‘œκ·Έλž¨ 검사(Program Check)
  7. SVC(SuperVisor Call)

 

μ‹œμŠ€ν…œ 콜 & μΈν„°λŸ½νŠΈμ˜ λ™μž‘ κ³Όμ •(μ˜ˆμ‹œ)

μ‹±κΈ€ μ½”μ–΄ ν™˜κ²½μ—μ„œ μ“°λ ˆλ“œ1(t1)κ³Ό μ“°λ ˆλ“œ2(t2)κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž

 

t1μ—μ„œ file read μš”μ²­μ΄ λ“€μ–΄μ™”λ‹€.

μ΄λ•Œ file read에 ν•΄λ‹Ήν•˜λŠ” μ‹œμŠ€ν…œ 콜이 호좜되며 κΈ°μ‘΄ t1의 μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  컀널 λͺ¨λ“œλ‘œ μ§„μž…ν•œλ‹€.

컀널λͺ¨λ“œμ— μ§„μž…ν•œ t1은 ν•΄λ‹Ή file이 read κ°€λŠ₯ν•œ μƒνƒœκ°€ λ λ•ŒκΉŒμ§€ waiting ν•˜κ²Œ 되며 λ‹€μ‹œ μœ μ € λͺ¨λ“œλ‘œ μ§„μž… ν›„ t2κ°€ μ‹€ν–‰λ˜κ²Œ λœλ‹€.

 

t1μ—μ„œ μš”μ²­ν•œ file이 read μš”μ²­μ„ μ²˜λ¦¬ν•  μ€€λΉ„κ°€ λ˜μ—ˆλ‹€.

μ΄λ•ŒλŠ” μ•„κΉŒμ™€ λ‹€λ₯΄κ²Œ μ‹œμŠ€ν…œ 콜이 μ•„λ‹Œ μΈν„°λŸ½νŠΈκ°€ ν˜ΈμΆœλœλ‹€. λ‹€μ‹œ CPUλŠ” t2의 μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  t1을 waitingμ—μ„œ ready(runnable)둜 μƒνƒœλ₯Ό λ°”κΎΌλ‹€. 그런 λ‹€μŒ μœ μ €λͺ¨λ“œλ‘œ μ§„μž… 후에 t2λ₯Ό μ‹€ν–‰ν•œλ‹€.

 

λͺ¨μ’…μ˜ 이유둜 t2의 CPU μ μœ κ°€ μ€‘λ‹¨λ˜λŠ” 일이 생길 것이닀.

CPUλŠ” λ‹€μ‹œ 컀널 λͺ¨λ“œλ‘œ μ§„μž… 후에 t2λ₯Ό ready μƒνƒœλ‘œ λ°”κΎΌλ‹€. μ΄μ œλŠ” t1을 μ‹€ν–‰ μƒνƒœλ‘œ λ°”κΎΈκ³  μž‘μ—…λ“€μ„ μ²˜λ¦¬ν•˜λ©΄ λœλ‹€.

 

ν•˜μ§€λ§Œ μ‚¬μš©μžλŠ” μ§μ ‘μ μœΌλ‘œ μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•  일이 μ—†λŠ”λ° μ΄λŠ” ν•˜μ΄(high) 레벨 μ–Έμ–΄κ°€ μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•  수 μžˆλ„λ‘ λž˜ν•‘(wrapping)을 톡해 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. λŒ€ν‘œμ μœΌλ‘œ μŠ€λ ˆλ“œλ₯Ό start ν•  λ•Œ native μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ JNI(Java Native Interface)κ°€ ν•΄λ‹Ή μš΄μ˜μ²΄μ œμ— λ§žλŠ” μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•΄μ€€λ‹€.

private native void start0();

 

 

+ Recent posts