CS

운영체제 곡룑책 : Ch2. Operating System Structures | 운영체제 ꡬ쑰

Yunny52 2023. 3. 8. 21:19

πŸ“Œ λ“€μ–΄κ°€λ©°

운영체제λ₯Ό μ‚΄νŽ΄λ³΄κΈ° μœ„ν•œ λͺ‡κ°€μ§€ 관점이 μžˆλ‹€.

1. μš΄μ˜μ²΄μ œκ°€ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€μ— μ΄ˆμ μ„ λ§žμΆ˜λ‹€.

2. μš΄μ˜μ²΄μ œκ°€ μ‚¬μš©μžμ™€ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ΄ˆμ μ„ λ§žμΆ˜λ‹€.

3. μ‹œμŠ€ν…œμ˜ κ΅¬μ„±μš”μ†Œμ™€ κ·Έλ“€μ˜ μƒν˜Έ 연결에 μ΄ˆμ μ„ λ§žμΆ˜λ‹€.

 

이 μ„Έκ°€μ§€ 츑면을 κΈ°μ€€μœΌλ‘œ μ‚¬μš©μž, ν”„λ‘œκ·Έλž˜λ¨Έ, 운영체제 μ„€κ³„μžμ˜ κ΄€μ μ—μ„œ λͺ¨λ‘ μ‚΄νŽ΄λ³΄μž. 

 


πŸ“š 2.1 운영체제 μ„œλΉ„μŠ€

μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€. 즉, ν”„λ‘œκ·Έλž¨κ³Ό κ·Έ ν”„λ‘œκ·Έλž¨μ˜ μ‚¬μš©μžμ—κ²Œ νŠΉμ • μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

μ΄λŸ¬ν•œ μ„œλΉ„μŠ€λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν”„λ‘œκ·Έλž˜λ° μž‘μ—…μ„ 더 μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•œλ‹€.

 

 

[ μ‚¬μš©μžμ—κ²Œ 도움을 μ£ΌλŠ” 것을 λͺ©μ μœΌλ‘œ ν•˜λŠ” μ„œλΉ„μŠ€ ]

 

βœ”οΈ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€(user interface) 

   * 거의 λͺ¨λ“  OSκ°€ μ œκ³΅ν•˜λ©°, μ—¬λŸ¬ ν˜•νƒœλ‘œ 제곡될 수 μžˆμ§€λ§Œ 일반적으둜 κ·Έλž˜ν”½ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€(GUI)κ°€ μ‚¬μš©λœλ‹€.

   * μ—¬κΈ°μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” μœˆλ„μš° μ‹œμŠ€ν…œμœΌλ‘œ, λ§ˆμš°μŠ€μ™€ ν‚€λ³΄λ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€.

   * νœ΄λŒ€μ „ν™” 및 νƒœλΈ”λ¦Ώκ³Ό 같은 λͺ¨λ°”일 μ‹œμŠ€ν…œμ€ ν„°μΉ˜ 슀크린 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€

   * λͺ…λ Ήμ–΄ 라인 μΈν„°νŽ˜μ΄μŠ€(CLI) (λͺ…λ Ή μ‚¬μš©, λͺ…λ Ή μž…λ ₯ν•  ν‚€λ³΄λ“œ μ‚¬μš©)도 μ œκ³΅ν•œλ‹€.

 

βœ”οΈ ν”„λ‘œκ·Έλž¨ μˆ˜ν–‰(program execution)

   * μ‹œμŠ€ν…œμ€ ν”„λ‘œκ·Έλž¨μ„ λ©”λͺ¨λ¦¬μ— μ μž¬ν•΄ μ‹€ν–‰ν•  수 μžˆμ–΄μ•Ό ν•˜λ©°, 정상이든 비정상이든 싀행을 끝낼 수 μžˆμ–΄μ•Ό ν•œλ‹€.

 

βœ”οΈ μž…μΆœλ ₯ μ—°μ‚°(I/O operation)

   * μˆ˜ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ€ μž…μΆœλ ₯을 μš”κ΅¬ν•  수 있고, μ΄λŸ¬ν•œ μž…μΆœλ ₯μ—λŠ” νŒŒμΌμ΄λ‚˜ μž…μΆœλ ₯ μž₯μΉ˜κ°€ 연관될 수 μžˆλ‹€.

   * 효율과 보호λ₯Ό μœ„ν•΄, μ‚¬μš©μžλ“€μ€ 톡상 μž…μΆœλ ₯ μž₯치λ₯Ό 직접 μ œμ–΄ν•  수 없기에 μš΄μ˜μ²΄μ œκ°€ μž…μΆœλ ₯ μˆ˜ν–‰μ˜ μˆ˜λ‹¨μ„ μ œκ³΅ν•΄μ•Ό ν•œλ‹€.

 

βœ”οΈ 파일 μ‹œμŠ€ν…œ μ‘°μž‘(file system manipulation)

   * ν”„λ‘œκ·Έλž¨μ€ νŒŒμΌμ„ μ—¬λŸ¬ λ°©λ²•μœΌλ‘œ μ‘°μž‘ν•  ν•„μš”κ°€ μžˆλ‹€.

   * λ§Žμ€ μš΄μ˜μ²΄μ œλ“€μ€ 개인의 선택에 따라 ν˜Ήμ€ νŠΉμ • νŠΉμ„±κ³Ό μ„±λŠ₯ νŠΉμ„±μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ 파일 μ‹œμŠ€ν…œμ„ μ œκ³΅ν•œλ‹€.

 

βœ”οΈ 톡신(communication)

   * ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ 정보λ₯Ό κ΅ν™˜ν•΄μ•Ό ν•  ν•„μš”κ°€ μžˆλŠ” μ—¬λŸ¬ 상황에, 톡신을 μˆ˜ν–‰ν•˜λŠ” 두가지 방법이 μžˆλ‹€.

   * λ™μΌν•œ μ»΄ν“¨ν„°μ—μ„œ μˆ˜ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ“€ μ‚¬μ΄μ—μ„œ μΌμ–΄λ‚˜λŠ” 톡신은 곡유 λ©”λͺ¨λ¦¬λ₯Ό 톡해 κ΅¬ν˜„λœλ‹€.

   * λ„€νŠΈμ›Œν¬μ— μ˜ν•΄ ν•¨κ»˜ λ¬Άμ—¬μžˆλŠ” μ„œλ‘œ λ‹€λ₯Έ 컴퓨터 μ‹œμŠ€ν…œμƒμ—μ„œ μˆ˜ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€ μ‚¬μ΄μ—μ„œ μΌμ–΄λ‚˜λŠ” 톡신은 λ©”μ‹œμ§€ 전달 기법을 μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„λ  수 μžˆλŠ”λ°, 이 경우 μ •λ³΄μ˜ νŒ¨ν‚·λ“€μ΄ μš΄μ˜μ²΄μ œμ— μ˜ν•΄ ν”„λ‘œμ„ΈμŠ€λ“€ 사이λ₯Ό μ΄λ™ν•œλ‹€.

 

βœ”οΈ 였λ₯˜ 탐지(error detection)

   * μš΄μ˜μ²΄μ œλŠ” λͺ¨λ“  κ°€λŠ₯ν•œ 였λ₯˜λ₯Ό 항상 μ˜μ‹ν•˜κ³  μžˆμ–΄μ•Ό ν•˜λ©°, μ˜¬λ°”λ₯΄κ³  일관성 μžˆλŠ” 계산을 보μž₯ν•˜κΈ° μœ„ν•΄ 각 μœ ν˜•μ˜ 였λ₯˜μ— λŒ€ν•΄ μ λ‹Ήν•œ 쑰처λ₯Ό ν•΄μ•Ό ν•œλ‹€.

 

 

[ μ‹œμŠ€ν…œ 자체의 효율적인 λ™μž‘μ„ 보μž₯ν•˜κΈ° μœ„ν•œ μ„œλΉ„μŠ€ ]

 

βœ”οΈ μžμ›ν• λ‹Ή(resource allocation)

   * λ‹€μˆ˜μ˜ ν”„λ‘œμ„ΈμŠ€λ‚˜ λ‹€μˆ˜μ˜ μž‘μ—…μ΄ λ™μ‹œμ— 진행될 λ•ŒλŠ” κ·Έλ“€ 각각에 μžμ›μ„ ν• λ‹Ήν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

 

βœ”οΈ 기둝 μž‘μ„±(logging)

   * μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–€ μ’…λ₯˜μ˜ 컴퓨터 μžμ›μ„ μ–Όλ§ˆλ‚˜ 많이 μ‚¬μš©ν•˜λŠ”μ§€λ₯Ό μΆ”μ ν•œλ‹€.

   * μ΄λŸ¬ν•œ 기둝 κ΄€λ¦¬λŠ” μ»΄ν“¨νŒ… μ„œλΉ„μŠ€λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ μ‹œμŠ€ν…œμ„ μž¬κ΅¬μ„±ν•˜κ³ μž ν•˜λŠ” μ‹œμŠ€ν…œ κ΄€λ¦¬μžμ—κ²Œ κ·€μ€‘ν•œ μžλ£Œμ΄λ‹€.

 

βœ”οΈ 보호(protection)와 λ³΄μ•ˆ(security)

   * μ„œλ‘œ λ‹€λ₯Έ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ³‘ν–‰ν•˜κ²Œ μˆ˜ν–‰λ  λ•Œ, ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‚˜ 운영체제 자체λ₯Ό λ°©ν•΄ν•΄μ„œλŠ” μ•ˆλœλ‹€.

   * λ³΄ν˜ΈλŠ” μ‹œμŠ€ν…œ μžμ›μ— λŒ€ν•œ λͺ¨λ“  접근이 ν†΅μ œλ˜λ„λ‘ 보μž₯ν•˜λŠ” 것을 ν•„μš”λ‘œ ν•˜λ©°, 각 μ‚¬μš©μžκ°€ μžμ›μ— λŒ€ν•œ 접근을 원할 λ•Œ 톡상 νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ μ‹œμŠ€ν…œμ—κ²Œ 자기 μžμ‹ μ„ μΈμ¦ν•˜λŠ” κ²ƒμœΌλ‘œλΆ€ν„° μ‹œμž‘λœλ‹€.

   * λ³΄μ•ˆμ€ λ„€νŠΈμ›Œν¬ μ–΄λŒ‘ν„° λ“±κ³Ό 같은 μ™ΈλΆ€ μž…μΆœλ ₯ μž₯μΉ˜λ“€μ„ λΆ€μ ν•©ν•œ μ ‘κ·Ό μ‹œλ„λ‘œλΆ€ν„° μ§€ν‚€κ³ , μΉ¨μž…μ˜ 탐지λ₯Ό μœ„ν•΄ λͺ¨λ“  접속을 κΈ°λ‘ν•˜λŠ” κ²ƒμœΌλ‘œ λ²”μœ„λ₯Ό λ„“νžŒλ‹€.

 


πŸ“š 2.2 μ‚¬μš©μžμ™€ 운영체제 μΈν„°νŽ˜μ΄μŠ€

μ‚¬μš©μžκ°€ OS와 μΈν„°νŽ˜μ΄μŠ€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ„Έ κ°€μ§€ 방법에 λŒ€ν•΄ 쑰금 더 μžμ„Έν•˜κ²Œ μ•Œμ•„λ³΄μž.

2.2.1 λͺ…λ Ή 인터프리터 Command-Interpreter

λ¨Όμ €, λͺ…λ Ή 인터프리터이닀. shell으둜 유λͺ…ν•˜λ‹€.

λ§κ·ΈλŒ€λ‘œ ls와 같은 λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€ ν•œλ‹€. (μΈν„°νŽ˜μ΄μŠ€: λ‘κ°œμ˜ μ‹œμŠ€ν…œμ΄ μ„œλ‘œ μƒν˜Έμž‘μš©)

 

λͺ…λ Ή μΈν„°ν”„λ¦¬ν„°μ˜ μ£Όμš”ν•œ 역할은 μ‚¬μš©μžκ°€ νŠΉμ •ν•œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό λ°›μ•„μ„œ μ‹€ν–‰μ‹œν‚€λŠ” 것이닀.

 

이λ₯Ό μœ„ν•΄ λͺ…λ Ή μΈν„°ν”„λ¦¬ν„°λŠ” 그자체둜 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰μ‹œν‚¬ μ½”λ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€. 예λ₯Ό λ“€μ–΄, νŒŒμΌμ„ μ§€μš°λΌλŠ” λͺ…λ Ήμ–΄λŠ” λͺ…λ Ή 인터프리터가 그에 λ§žλŠ” μ μ ˆν•œ μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜λŠ” μ½”λ“œμ˜ λΆ€λΆ„μœΌλ‘œ μ ν”„ν•˜λ„λ‘ ν•œλ‹€.

 

ν˜Ήμ€ λͺ…λ Ή 인터프리터가 λͺ…λ Ήμ–΄λ₯Ό μ΄ν•΄ν•˜μ§€ λͺ»ν•  경우, ν•΄λ‹Ή λͺ…λ Ήμ–΄μ˜ νŒŒμΌμ„ μ‹λ³„ν•˜μ—¬ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ°›κ³  μ‹€ν–‰ν•˜λ„λ‘ ν•œλ‹€. 예λ₯Ό λ“€μ–΄, "rm file.txt"λΌλŠ” λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν–ˆμ„ 경우, rmμ΄λΌλŠ” νŒŒμΌμ„ μ°Ύμ•„μ„œ, λ©”λͺ¨λ¦¬μ— λ‘œλ“œν•˜κ³ , file.txt.λΌλŠ” νŒŒλΌλ―Έν„°μ™€ ν•¨κ»˜ μ‹€ν–‰μ‹œν‚¨λ‹€. 이 방식은 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μƒˆλ‘œμš΄ λͺ…렁어λ₯Ό μ‹œμŠ€ν…œμ— μ‰½κ²Œ μΆ”κ°€ν• μˆ˜ μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

 

2.2.2 κ·Έλž˜ν”½ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ Graphical User Interface

GUI라고도 μ•Œλ €μ§„ κ·Έλž˜ν”½ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.

μ‚¬μš©μžμ—κ²Œ μΉœμˆ™ν•œ λ°©μ‹μœΌλ‘œ, 마우슀λ₯Ό 움직여 λ°μŠ€ν¬νƒ‘ ν™”λ©΄ μ†μ˜ μ΄λ―Έμ§€λ‚˜ μ•„μ΄μ½˜μ„ 가리킬 수 있으며 마우슀λ₯Ό ν΄λ¦­ν•¨μœΌλ‘œμ¨ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€κ±°λ‚˜ 파일 ν˜Ήμ€ 디렉토리λ₯Ό 선택할 수 μžˆλ‹€.

 

2.2.3 ν„°μΉ˜ 슀크린 μΈν„°νŽ˜μ΄μŠ€ Touch-Screen Interface

슀마트폰인 νƒœλΈ”λ¦Ώ 같은 λͺ¨λ°”일 μ‹œμŠ€ν…œμ—μ„œλŠ” λͺ…λ Ή μΈν„°νŽ˜μ΄μŠ€λ‚˜ λ§ˆμš°μŠ€μ™€ ν‚€λ³΄λ“œλ₯Ό μ΄μš©ν•˜λŠ” κ·Έλž˜ν”½ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ 방식이 μ‹€μš©μ μ΄μ§€ μ•ŠκΈ°μ—, ν„°μΉ˜ μ‹œν¬λ¦° μΈν„°νŽ˜μ΄μŠ€λ₯Ό 주둜 μ‚¬μš©ν•œλ‹€.

μš°λ¦¬κ°€ ν‰μ†Œμ— ν•˜λ“―, 손가락을 움직여 ν„°μΉ˜ μŠ€ν¬λ¦°μ„ λˆ„λ₯΄κ±°λ‚˜ λ°€μ–΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

 


πŸ“š 2.3 System Calls

μ‹œμŠ€ν…œμ½œμ€ 컴퓨터 μ‘μš©ν”„λ‘œκ·Έλž¨κ³Ό 운영체제λ₯Ό μ—°κ²°μ‹œν‚€λŠ” 역할을 ν•œλ‹€.

μ•„κΉŒ μ–ΈκΈ‰ν–ˆλ˜ μš΄μ˜μ²΄μ œκ°€ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€λ“€μ€ μ‹œμŠ€ν…œμ½œμ„ 톡해 ν˜ΈμΆœν•  수 μžˆλ‹€.

 

2.3.2 μ‘μš© ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€ Application Programming Interface

μœ„μ˜ κ·Έλ¦Όμ—μ„œ λ³Ό 수 μžˆλ“―μ΄, κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μ΄λΌλ„ λ§Žμ€ μ‹œμŠ€ν…œμ½œμ΄ μ‚¬μš©λœλ‹€. 즉, 운영체제λ₯Ό 많이많이 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

보톡 λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 이 μ •λ„μ˜ 세뢀사항을 λ³Ό 일이 μ—†μ§€λ§Œ, μ‘μš© ν”„λ‘œκ·Έλž¨ κ°œλ°œμžλ“€μ€ API(application programming interface)에 따라 ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•œλ‹€. μ—¬κΈ°μ„œ APIλž€ λ¬΄μ—‡μΌκΉŒ?

 

APIλŠ” 각 ν•¨μˆ˜μ— μ „λ‹¬λ˜λŠ” νŒŒλΌλ―Έν„°λ“€κ³Ό 리턴값을 ν¬ν•¨ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨ κ°œλ°œμžκ°€ μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜ 집합을 λ‹΄κ³  μžˆλ‹€. 운영체제의 APIκ°€ μ‹œμŠ€ν…œμ½œλ“€μ΄λΌκ³  μ΄ν•΄ν•˜λ©΄ μ’‹λ‹€.

 

그럼 APIλŠ” μ–΄λ–»κ²Œ μƒκ²Όμ„κΉŒ?

λ§Œμ•½ μ‚¬μš©μžκ°€ "man read"λΌλŠ” λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ read() ν•¨μˆ˜μ˜ APIλ₯Ό μ–»μ–΄λ³΄μž. μ•„λž˜μ™€ 같이 λ‚˜νƒ€λ‚˜ μžˆμ„ 것이닀.

 

λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” APIλ₯Ό 톡해 μ‹œμŠ€ν…œμ½œμ„ ν˜ΈμΆœν•˜λ©°,

API μ‚¬μš©μžλŠ” 각 ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€, μ–΄λ–€ λ°©μ‹μœΌλ‘œ λŒμ•„κ°€λŠ”μ§€ λͺ°λΌλ„ λœλ‹€. κ·Έμ € APIλ₯Ό μ€€μˆ˜ν•˜κ³  호좜 κ²°κ³Όλ‘œμ„œ μš΄μ˜μ²΄μ œκ°€ 무엇을 ν•  μ§€λ§Œ νŒλ‹¨ν•˜λ©΄ λœλ‹€.

 

+ μ™œ 직접 ν˜ΈμΆœν•˜μ§€ μ•Šκ³  APIλ₯Ό μ‚¬μš©ν• κΉŒ?

1. νŽΈμ˜μ„±μ„ μœ„ν•΄ - 직접 ν˜ΈμΆœν•˜λŠ” 것은 맀우 νž˜λ“€λ‹€. ν•˜μ§€λ§Œ λΆˆν™•μ‹€μ„±μ„ μ œκ±°ν•˜κΈ° μœ„ν•΄ μ§μ ‘μ μœΌλ‘œ μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€.

2. νœ΄λŒ€μ„±μ„ μœ„ν•΄ - μ–΄λ””μ„œλ“  μ μš©ν•  수 μžˆλ‹€.

 

그럼 μ‚¬μš©μž μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‹œμŠ€ν…œμ½œμ„ ν˜ΈμΆœν•˜λ©΄ μ–΄λ–»κ²Œ 처리될까?

μ‹œμŠ€ν…œμ½œ μΈν„°νŽ˜μ΄μŠ€λŠ” μ‹œμŠ€ν…œμ½œμ— λŒ€ν•œ 링크 역할을 ν•œλ‹€. μœ„μ˜ κ·Έλ¦Όμ—μ„œλŠ” open() ν•¨μˆ˜λ₯Ό 톡해 μš΄μ˜μ²΄μ œκ°€ ν•„μš”ν•œ μ‹œμŠ€ν…œμ½œμ„ ν˜ΈμΆœν•œλ‹€. 일반적으둜 λ²ˆν˜ΈλŠ” 각 μ‹œμŠ€ν…œμ½œκ³Ό μ—°κ²°λ˜μ–΄ 있으며, μ‹œμŠ€ν…œμ½œ μΈν„°νŽ˜μ΄μŠ€κ°€ λ²ˆν˜Έλ“€μ— 따라 μΈλ±μ‹±λœ ν…Œμ΄λΈ”(μ‹œμŠ€ν…œμ½œ ν…Œμ΄λΈ”)을 μœ μ§€ν•œλ‹€.

 

2.3.3 μ‹œμŠ€ν…œμ½œμ˜ μœ ν˜• Types of System Calls

μ‹œμŠ€ν…œμ½œμ€ λŒ€λž΅ 6개의 μΉ΄ν…Œκ³ λ¦¬λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

 

  • ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ process control
    • 끝내기 end, 쀑지 abort
      • μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ€ μˆ˜ν–‰μ„ μ •μƒμ μœΌλ‘œλ‚˜ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œ(μ—λŸ¬λ₯Ό λ°˜ν™˜)ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    • 적재 load, μˆ˜ν–‰ execute
      • ν•œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ‚˜ μž‘μ—…μ΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•˜κΈ°λ₯Ό 원할 수 μžˆλ‹€.
      • λ‘œλ“œλœ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜μ—ˆμ„ λ•Œ, μ–΄λ””λ‘œ control을 λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ”κ°€μ— λŒ€ν•œ 질문이 생길 수 μžˆλ‹€.
      • λ§Œμ•½ control이 κΈ°μ‘΄ ν”„λ‘œκ·Έλž¨μœΌλ‘œ λŒμ•„κ°„λ‹€λ©΄, κΈ°μ‘΄ ν”„λ‘œκ·Έλž¨μ˜ memory imageλ₯Ό μ €μž₯해두어야 ν•œλ‹€.
      • λ§Œμ•½ 두 ν”„λ‘œκ·Έλž¨μ΄ λ³‘ν–‰ν•˜κ²Œ μˆ˜ν–‰λœλ‹€λ©΄, multi-programming 될 μƒˆλ‘œμš΄ μž‘μ—…μ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•œλ‹€.
    • ν”„λ‘œμ„ΈμŠ€ 생성, ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ
      • μƒˆλ‘œμš΄ μž‘μ—…μ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€μ„ μƒμ„±ν•œλ‹€λ©΄, μ΄λ“€μ˜ 싀행을 μ œμ–΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    • ν”„λ‘œμ„ΈμŠ€ 속성 νšλ“, 속성 κ²°μ •
      • μž‘μ—…μ˜ μš°μ„ μˆœμœ„, μ΅œλŒ€ ν• λ‹Ήκ°€λŠ₯ν•œ μ‹€ν–‰μ‹œκ°„ 등을 ν¬ν•¨ν•˜μ—¬ 속성을 κ²°μ •ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    • μ‹œκ°„ 기닀리기 wait for time
      • μƒˆλ‘œμš΄ μž‘μ—…μ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•œ ν›„μ—λŠ” μ΄λ“€μ˜ 싀행이 λλ‚˜κΈ°λ₯Ό 기닀릴 ν•„μš”κ°€ μžˆμ„ 수 μžˆλ‹€.
    • 이벀트
      • wait event : νŠΉμ • 사건이 일어날 λ•ŒκΉŒμ§€ 기닀릴 수 μžˆμ–΄μ•Ό ν•œλ‹€.
      • signal event : κ·Έ 사건이 μΌμ–΄λ‚˜λ©΄ μ‹ ν˜Έλ₯Ό 보낼 수 μžˆμ–΄μ•Ό ν•œλ‹€.
    • ν• λ‹Ήκ³Ό free λ©”λͺ¨λ¦¬ allocate and free memory
      • λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ κ³΅μœ ν•˜λŠ” 데이터듀에 λŒ€ν•΄ 일관성을 보μž₯ν•΄μ•Ό ν•  ν•„μš”μ„±μ΄ μžˆμ„ 수 μžˆλ‹€.
      • 이에 μš΄μ˜μ²΄μ œλŠ” μ’…μ’… ν”„λ‘œμ„ΈμŠ€κ°€ 곡유 데이터λ₯Ό lock ν•  수 μžˆλŠ” μ‹œμŠ€ν…œμ½œμ„ μ œκ³΅ν•œλ‹€.
  • 파일 μ‘°μž‘ file management
    • 생성 create, μ‚­μ œ delete
    • μ—΄κΈ° open, λ‹«κΈ° close
    • 읽기 read, μ“°κΈ° write, μœ„μΉ˜ λ³€κ²½ reposition
      • μœ„μΉ˜ λ³€κ²½μ˜ 예) 파일 끝으둜 κ±΄λ„ˆλ›°κΈ°
    • 속성 νšλ“ 및 κ²°μ • get file attributes, set file attributes
      • 파일 속성에 λŒ€ν•œ 정보λ₯Ό 얻을 수 있고, λ³€κ²½ν•  수 μžˆλ‹€.
  • μž₯치 μ‘°μž‘ device management
    • ν”„λ‘œμ„ΈμŠ€λŠ” μž‘μ—…μ„ 계속 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ 메인 λ©”λͺ¨λ¦¬λ‚˜ λ””μŠ€ν¬ λ“œλΌμ΄λΈŒ λ“±μ˜ μΆ”κ°€ μžμ›μ„ ν•„μš”λ‘œ ν•  수 μžˆλ‹€.
    • μž₯치λ₯Ό μš”κ΅¬ request devices, μž₯치 방좜 release devices
      • λ‹€μˆ˜μ˜ μ‚¬μš©μžκ°€ λ™μ‹œμ— μ‚¬μš©ν•˜λŠ” μ‹œμŠ€ν…œμ€ 독점적인 λ””λ°”μ΄μŠ€ μ‚¬μš©μ„ 보μž₯λ°›κΈ° μœ„ν•΄ request ν•΄μ•Ό ν•œλ‹€.
      • λ””λ°”μ΄μŠ€ μ‚¬μš©μ΄ λλ‚˜λ©΄ λ°˜λ“œμ‹œ release ν•΄μ•Ό ν•œλ‹€.
    • 읽기 read, μ“°κΈ° write, μœ„μΉ˜ λ³€κ²½ reposition
      • 일단 λ””λ°”μ΄μŠ€λ₯Ό requestν•˜μ—¬ ν• λ‹Ήλ˜λ©΄, ν•΄λ‹Ή λ””λ°”μ΄μŠ€λ₯Ό 읽고, μ“°κ³ , μœ„μΉ˜ λ³€κ²½ ν•  수 μžˆλ‹€.
      • I/O μž₯μΉ˜μ™€ νŒŒμΌλ“€ κ°„μ—λŠ” μœ μ‚¬μ„±μ΄ 많기 λ•Œλ¬Έμ—, UNIXλ₯Ό ν¬ν•¨ν•œ λ§Žμ€ μš΄μ˜μ²΄μ œκ°€ 이듀 λ‘˜μ„ ν†΅ν•©ν•œ 파일-μž₯치 ꡬ쑰 file-device structure둜 κ²°ν•©ν–ˆλ‹€.
      • μž₯치 속성 νšλ“ 및 κ²°μ • get device attributes, set device attributes
      • μž₯치의 논리적 λΆ€μ°© λ˜λŠ” 뢄리 logically attach or detach devices
  • 정보 μœ μ§€λ³΄μˆ˜ information maintenance
    • μ‹œκ°„κ³Ό λ‚ μ§œμ˜ μ„€μ •κ³Ό νšλ“ get/set time or date
    • μ‹œμŠ€ν…œ λ°μ΄ν„°μ˜ μ„€μ •κ³Ό νšλ“ get/set system data
    • ν”„λ‘œμ„ΈμŠ€, 파일, μž₯치 μ†μ„±μ˜ νšλ“ get process, file, or device attributes
    • ν”„λ‘œμ„ΈμŠ€, 파일, μž₯치 μ†μ„±μ˜ μ„€μ • set process, file, or device attributes
  • 톡신 communications
    • Messaging Passing Model
      • ν†΅μ‹ ν•˜λŠ” 두 ν”„λ‘œμ„ΈμŠ€κ°€ 정보λ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•΄ μ„œλ‘œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›λŠ”λ‹€.
      • λ©”μ‹œμ§€λŠ” 두 ν”„λ‘œμ„ΈμŠ€ μ‚¬μ΄μ—μ„œ 직접 κ΅ν™˜λ˜κ±°λ‚˜, λ©”μΌλ°•μŠ€λ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ κ΅ν™˜λ  수 μžˆλ‹€.
      • 좩돌이 μ—†κΈ° λ•Œλ¬Έμ— μ†ŒλŸ‰μ˜ 데이터λ₯Ό κ΅ν™˜ν•˜λŠ”λ° μ’‹λ‹€.
    • Shared Memory Model
      • ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μ†Œμœ ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ— λŒ€ν•΄ μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‹œμŠ€ν…œμ½œμ„ μ‚¬μš©ν•œλ‹€.
      • μ •μƒμ μœΌλ‘œ, μš΄μ˜μ²΄μ œλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬λ₯Ό μ ‘κ·Όν•˜λŠ” 것을 λ§‰μœΌλ €κ³  ν•œλ‹€.
      • 이에, Shared Memory Modelμ—μ„œλŠ” 이런 μ œν•œμ„ μ œκ±°ν•΄μ•Ό ν•  ν•„μš”μ„±μ΄ μžˆλ‹€.
      • μ΅œλŒ€ 속도와 νŽΈλ¦¬ν•œ 톡신을 ν•  수 μžˆμ§€λ§Œ, 동기화에 λŒ€ν•œ λ¬Έμ œκ°€ μžˆλ‹€.
  • 보호 protection
    • κ³Όκ±°μ—λŠ” λ‹€μˆ˜μ˜ μ‚¬μš©μžλ₯Ό κ°€μ§€λŠ” 닀쀑 ν”„λ‘œκ·Έλž¨ μ‹œμŠ€ν…œμ—μ„œλ§Œ κ³ λ €λ˜λŠ” λ¬Έμ œμ˜€μœΌλ‚˜, λ„€νŠΈμ›Œν‚Ήκ³Ό μΈν„°λ„·μ˜ μΆœν˜„μœΌλ‘œ, μ„œλ²„μ—μ„œ νœ΄λŒ€μš© μ»΄ν“¨ν„°κΉŒμ§€ λͺ¨λ“  컴퓨터 μ‹œμŠ€ν…œμ—μ„œ κ³ λ €ν•΄μ•Ό ν•œλ‹€.

 


πŸ“š 2.4  μ‹œμŠ€ν…œ μ„œλΉ„μŠ€ System Services

μ‹œμŠ€ν…œ μœ ν‹Έλ¦¬ν‹° system utilitiesλ‘œλ„ μ•Œλ €μ Έ 있으며, ν”„λ‘œκ·Έλž¨ 개발과 싀행을 μœ„ν•œ νŽΈλ¦¬ν•œ ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€.

λ‹€μŒκ³Ό 같은 μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€.

  • 파일 관리 file management
  • μƒνƒœ 정보 status information
  • 파일 λ³€κ²½ file modificatio
  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 지원 programming-language support
  • ν”„λ‘œκ·Έλž¨ μ μž¬μ™€ μˆ˜ν–‰ program loading and execution
  • 톡신 communications
  • λ°±κ·ΈλΌμš΄λ“œ μ„œλΉ„ background services

λŒ€λΆ€λΆ„μ˜ μš΄μ˜μ²΄μ œλŠ” μ‹œμŠ€ν…œ μ„œλΉ„μŠ€μ™€ ν•¨κ»˜ 일반적인 λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κ±°λ‚˜, 일반적인 연산을 μˆ˜ν–‰ν•˜λŠ”λ° μœ μš©ν•œ ν”„λ‘œκ·Έλž¨μ„ μ œκ³΅ν•œλ‹€.

 


πŸ“š 2.5 링컀와 λ‘œλ” Linkers and Loaders

 

보톡 ν”„λ‘œκ·Έλž¨μ€ λ°”μ΄λ„ˆλ¦¬ μ‹€ν–‰ 파일둜 λ””μŠ€ν¬μ— μ‘΄μž¬ν•˜λŠ”λ°, CPUμ—μ„œ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”λͺ¨λ¦¬λ‘œ κ°€μ Έμ™€μ„œ ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯에 놓아야 ν•œλ‹€. 이 과정을 μœ„μ˜ 그림으둜 λ‚˜νƒ€λ‚΄μ—ˆλ‹€. 

 

μš°μ„ , source program은 컴파일러 compilerλ₯Ό 톡해 object file둜 λ³€ν™˜λœλ‹€.

그럼 링컀 linkerκ°€ object fileκ³Ό λ‹€λ₯Έ object file듀을 κ²°ν•©ν•˜μ—¬ ν•˜λ‚˜μ˜ μ‹€ν–‰ κ°€λŠ₯ν•œ 이진 파일둜 λ§Œλ“ λ‹€.

λ‘œλ” loaderλŠ” 이진 μ‹€ν–‰ 파일 binary executable file을 λ©”λͺ¨λ¦¬λ‘œ λΆˆλŸ¬μ™€ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€.

 

dynamically linked libraries(DLLs)λ₯Ό 톡해 같은 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” νŒŒμΌλ“€μ΄ 뢈러온 라이브러리λ₯Ό κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, μœˆλ„μš°λŠ” DLLsλ₯Ό μ§€μ›ν•˜μ—¬ μ‹€ν–‰ 파일둜 μ‚¬μš©λ˜μ§€ μ•Šμ„ 수 μžˆλŠ” λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ λ§ν¬ν•˜κ±°λ‚˜ λ‘œλ“œν•˜λŠ” 것을 λ§‰λŠ”λ‹€. (λ’·λ‹¨μ›μ—μ„œ μžμ„Ένžˆ λ‹€λ£° μ˜ˆμ •)

 


πŸ“š 2.7 운영체제 섀계과 κ΅¬ν˜„ Operating-System Design and Implementation

운영체제λ₯Ό μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•˜λŠ” κ²ƒμ—λŠ” 정닡이 μ—†μ§€λ§Œ μ„±κ³΅μ μœΌλ‘œ μž…μ¦λœ 접근법에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.

 

2.7.1 섀계 λͺ©ν‘œ design goals

섀계 μ‹œ κ³ λ €ν•΄μ•Ό ν•  μš”κ΅¬μ‚¬ν•­μ€ μ‚¬μš©μž λͺ©μ κ³Ό μ‹œμŠ€ν…œ λͺ©μ μœΌλ‘œ ꡬ뢄지을 수 μžˆλ‹€.

μ‚¬μš©μž μž…μž₯μ—μ„œ μ‹œμŠ€ν…œμ€ μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•΄μ•Ό ν•˜κ³ , 배우기 μ‰¬μ›Œμ•Ό ν•˜λ©°, μ‹ λ’°μ„± 있고, μ•ˆμ „ν•˜κ³ , λΉ¨λΌμ•Όν•œλ‹€.

(convenient to use, easy to learn and use, reliable, safe, fast)

μ‹œμŠ€ν…œ μž…μž₯μ—μ„œ μš΄μ˜μ²΄μ œλŠ” 섀계, κ΅¬ν˜„, μœ μ§€ λ³΄μˆ˜κ°€ μ‰¬μ›Œμ•Ό ν•˜λ©°, 적응성, μ‹ λ’°μ„±, νš¨μœ¨μ„± 등을 κ°€μ Έμ•Ό ν•œλ‹€.

(easy to design, implement, and maintain, flexible, reliable, error free, efficient)

 

2.7.2 기법과 μ •μ±… mechanisms and policies

기법 mechanism은 μ–΄λ–»κ²Œ ν•  것인가(how to do something)을 κ²°μ •ν•˜λŠ” 것이닀.

μ •μ±… policiesλŠ” 무엇을 ν•  것인가(what will be done)λ₯Ό κ²°μ •ν•˜λŠ” 것이닀.

예λ₯Ό λ“€μ–΄, timer mechanismκ³Ό scheduing policyλŠ” 정책이고 30μΌλ§ˆλ‹€ λΉ„λ°€λ²ˆν˜Έλ₯Ό λ§Œλ£Œμ‹œν‚€λŠ” 것은 기법이닀.

 

기법과 μ •μ±…μ˜ λΆ„λ¦¬λŠ” flexibility을 μœ„ν•΄ μ€‘μš”ν•˜λ‹€.

정책은 μ–Έμ œ μ–΄λ””μ„œλ‚˜ 변경될 수 μžˆκΈ°μ—, 기법과 정책을 λΆ„λ¦¬ν•˜μ§€ μ•Šμ„ κ²½μš°μ—λŠ” 기법을 λ°”κΏ”μ•Ό ν•  μˆ˜λ„ 있고 이것은 λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€.

 

2.7.3 κ΅¬ν˜„ implementation

초창기 μš΄μ˜μ²΄μ œλŠ” μ–΄μ…ˆλΈ”λ¦¬μ–΄λ‘œ κ΅¬ν˜„λ˜μ—ˆμœΌλ©°, ν˜„μž¬ λŒ€λΆ€λΆ„μ˜ μš΄μ˜μ²΄μ œλŠ” Cλ‚˜ C++κ³Ό 같은 κ³ κΈ‰μ–Έμ–΄λ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.

 

κ³ κΈ‰μ–Έμ–΄λ‘œ κ΅¬ν˜„ν•  경우의 μž₯점은 λ‹€μŒκ³Ό κ°™λ‹€.

  • 더 빨라진 μ‹€ν–‰ μ‹œκ°„ faster implementation time
  • 쀄어든 μ½”λ“œ 라인 수 compact and easier to understand/debug
  • 컴파일러의 λ°œμ „μœΌλ‘œ 컀널 μ½”λ“œ μžμ²΄λŠ” 더 κ°œμ„ λœ ν˜•νƒœ improved compiler will improve the generated code
  • λ‹€λ₯Έ ν™˜κ²½μœΌλ‘œ μ½”λ“œλ₯Ό λ³€κ²½ν•˜κΈ° μ‰¬μ›Œμ§ easier to port

 

κ³ κΈ‰μ–Έμ–΄λ‘œ κ΅¬ν˜„ν•  경우의 단점은 λ‹€μŒκ³Ό κ°™λ‹€.

  • (μ„ΈλΆ€μ μœΌλ‘œ μ»¨νŠΈλ‘€ν•˜κΈ° μ–΄λ €μ›Œμ Έμ„œ) 속도가 λŠλ €μ§€κ³  μ €μž₯ μž₯μΉ˜κ°€ 많이 μ†Œμš”λœλ‹€.
  • ν•˜μ§€λ§Œ 쒋은 μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ μœ„μ˜ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.

 


πŸ“š 2.8 운영체제 ꡬ쑰 Operating-System Structure

2.8.1 λͺ¨λ†€λ¦¬ν‹± ꡬ쑰 Monolithic Structure

Monolithic κ΅¬μ‘°μ—μ„œλŠ” system call interface와 kernel interface μ‚¬μ΄μ˜ λͺ¨λ“  것이 kernel이닀.

μˆ˜λ§Žμ€ κΈ°λŠ₯듀이 ν•œ 덩어리에 λ“€μ–΄κ°€ μžˆκΈ°μ— μ‹œμŠ€ν…œ ν•œ λΆ€λΆ„μ˜ λ³€ν™”κ°€ λ‹€λ₯Έ 뢀뢄듀에 영ν–₯을 쀄 수 μžˆμ–΄μ„œ κ΅¬ν˜„ν•˜κ±°λ‚˜ μœ μ§€ λ³΄μˆ˜ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 단점이 μžˆλ‹€.

ν•˜μ§€λ§Œ μ„±λŠ₯ μΈ‘λ©΄μ—μ„œ μ‹œμŠ€ν…œμ½œ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ ν†΅μ‹ ν•˜λŠ” 경우 μ˜€λ²„ν—€λ“œκ°€ 거의 μ—†κ³  컀널 λ‚΄μ˜ 톡신 속도가 λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆλ‹€. μ΄λŸ¬ν•œ μž₯점 λ•Œλ¬Έμ— Linux, WindowsλŠ” μ—¬μ „νžˆ 이 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€.'

 

2.8.2 계측적 ꡬ쑰 Layered Approach

계측적 κ΅¬μ‘°λŠ” 운영체제λ₯Ό μ„ΈλΆ„ν™”ν•΄ 계측을 λΆ„λ¦¬ν•œ 방식이닀.

layerκ°€ 0인 κ°€μž₯ μ•„λž˜μ— μžˆλŠ” 계측은 ν•˜λ“œμ›¨μ–΄μ΄λ©°, layerκ°€ N인 κ°€μž₯ μœ„μ— μžˆλŠ” 계측은 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.

μž„μ˜μ˜ m측은 μžμ‹ λ³΄λ‹€ μ•„λž˜μ— μžˆλŠ” ν•˜μœ„μΈ΅λ“€μ˜ μ„œλΉ„μŠ€λ“€λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

λ¬Έμ œκ°€ 생겼을 경우 κ³„μΈ΅λ³„λ‘œ μˆ˜μ •ν•  수 μžˆκΈ°μ— μœ μ§€ λ³΄μˆ˜κ°€ νŽΈλ¦¬ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.

ν•˜μ§€λ§Œ 계측을 μ •μ˜ν•˜κΈ°κ°€ μ–΄λ ΅κ³ , ν•¨μˆ˜ 호좜  μ‹œ 단계λ₯Ό 많이 거쳐야 ν•˜λŠ” 경우 λΉ„νš¨μœ¨μ μΌ 수 μžˆλ‹€λŠ” 단점이 μžˆλ‹€.

 

2.8.3 λ§ˆμ΄ν¬λ‘œμ»€λ„ Microkernels

λ§ˆμ΄ν¬λ‘œμ»€λ„μ€ μ»€λ„μ—μ„œ 핡심적인 μš”μ†Œλ§Œ 남겨둔, 이λ₯Έλ°” κ°€λ²Όμš΄ 컀널이닀.

컀널이 컀질수둝 λ¬Έμ œκ°€ 생길 κ°€λŠ₯성이 λ†’μ•„μ§€κ³ , μœ μ§€ λ³΄μˆ˜κ°€ νž˜λ“€μ–΄μ§€κΈ° λ•Œλ¬Έμ— 정말 ν•„μš”ν•œ μ΅œμ†Œ κΈ°λŠ₯λ§Œμ„ 남겨두어 컀널을 더 κ°€λ³κ²Œ λ§Œλ“€ ν•„μš”κ°€ μžˆμ—ˆλ‹€.

 

λ§ˆμ΄ν¬λ‘œμ»€λ„μ˜ μ£Όμš” κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™λ‹€.

  • ν”„λ‘œμ„ΈμŠ€κ°„ 톡신 interprocess communication
  • λ©”λͺ¨λ¦¬ 관리 memory management
  • CPU μŠ€μΌ€μ€„λ§ CPU scheduling

λ§ˆμ΄ν¬λ‘œμ»€λ„μ˜ μž₯점은 λ‹€μŒκ³Ό κ°™λ‹€.

  • λͺ¨λ“  μƒˆλ‘œμš΄ μ„œλΉ„μŠ€λŠ” μ‚¬μš©μž 곡간에 μΆ”κ°€λ˜κΈ° λ•Œλ¬Έμ— 결과적으둜 μ»€λ„μ˜ μˆ˜μ •μ΄ λ°œμƒν•˜μ§€ μ•Šμ•„μ„œ 운영체제λ₯Ό ν™•μž₯ν•˜κΈ° 더 쉽닀. highly extensible OS kernel
  • ν•˜λ‚˜μ˜ ν•˜λ“œμ›¨μ–΄ μ„€κ³„μ—μ„œ λ‹€λ₯Έ κ²ƒμœΌλ‘œ μ΄μ‹ν•˜κΈ° 쉽닀. easy to port kernels
  • λ³΄μ•ˆμ„±, μ•ˆμ •μ„±μ΄ λ†’λ‹€ more secure and reliable

λ§ˆμ΄ν¬λ‘œμ»€λ„μ˜ 단점은 λ‹€μŒκ³Ό κ°™λ‹€.

  • λŠ˜μ–΄λ‚œ μ˜€λ²„ν—€λ“œ λ•Œλ¬Έμ— μ„±λŠ₯에 영ν–₯이 μžˆμ„ 수 μžˆλ‹€. impact on performance

 

2.8.4 λͺ¨λ“ˆ modules

이 λ°©λ²•μ—μ„œ 컀널은 핡심적인 κ΅¬μ„±μš”μ†Œμ˜ 집합을 κ°€μ§€κ³  있고, λΆ€νŒ… μ‹œμ— λ˜λŠ” μ‹€ν–‰ 쀑에 뢀가적인 μ„œλΉ„μŠ€λ“€μ„ λͺ¨λ“ˆμ„ 톡해 μ—°κ²°ν•œλ‹€. 섀계 μ‹œ μ€‘μš”ν•œ 점은 핡심 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€μ€ 컀널이 μ‹€ν–‰λ˜λŠ” λ™μ•ˆ λ™μ μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” 것이닀.

 

전체적인 κ²°κ³ΌλŠ” 각 뢀뢄이 μ •μ˜λ˜κ³  보호된 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§„λ‹€λŠ” μ μ—μ„œ 계측적 ꡬ쑰와 λΉ„μŠ·ν•˜μ§€λ§Œ λͺ¨λ“ˆμ—μ„œ μž„μ˜μ˜ λ‹€λ₯Έ λͺ¨λ“ˆμ„ ν˜ΈμΆœν•  수 μžˆλ‹€λŠ” μ μ—μ„œ 계측적 ꡬ쑰보닀 μœ μ—°ν•˜λ‹€κ³  ν•  수 μžˆλ‹€.

 

2.8.5 ν•˜μ΄λΈŒλ¦¬λ“œ μ‹œμŠ€ν…œ hybrid systems

ν•˜λ‚˜μ˜ ꡬ쑰만 μ‚¬μš©ν•˜λŠ” μš΄μ˜μ²΄μ œλŠ” 거의 μ—†λ‹€. μ„œλ‘œ λ‹€λ₯Έ ꡬ쑰λ₯Ό κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.

예λ₯Ό λ“€μ–΄, Linux, WindowsλŠ” monolithic ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ module을 μ§€μ›ν•œλ‹€.

 


πŸ“š 2.9 운영체제 λΉŒλ”©κ³Ό λΆ€νŒ… building and booting an operation system

2.9.1 운영체제 생성 operating-system generation

μš΄μ˜μ²΄μ œλŠ” λ‹€μ–‘ν•œ μ£Όλ³€ ꡬ성을 κ°€μ§„, μ—¬λŸ¬ λΆ€λ₯˜μ˜ κΈ°κ³„μ—μ„œ μˆ˜ν–‰λ˜λ„λ‘ μ„€κ³„λ˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

이 경우, μ‹œμŠ€ν…œμ€ 각 specific computer siteλ₯Ό μœ„ν•΄ κ΅¬μ„±λ˜κ±°λ‚˜ λ˜λŠ” μƒμ„±λ˜μ–΄μ•Ό ν•œλ‹€.

이 절차λ₯Ό μ‹œμŠ€ν…œ 생성 SYSGEN이라고 ν•œλ‹€.

 

2.9.2 μ‹œμŠ€ν…œ λΆ€νŠΈ system boot

컴퓨터가 전원을 μΌœκ±°λ‚˜ μž¬λΆ€νŒ… λ“±μ˜ 사건을 λ°›μœΌλ©΄ λͺ…λ Ή λ ˆμ§€μŠ€ν„°λŠ” 미리 μ§€μ •λœ λ©”λͺ¨λ¦¬ μœ„μΉ˜λ₯Ό 가리킀고, κ·Έκ³³μ—μ„œλΆ€ν„° 싀행을 μ‹œμž‘ν•œλ‹€. ν•΄λ‹Ή μœ„μΉ˜μ—λŠ” 졜초의 bootstrap program이 μ‘΄μž¬ν•œλ‹€. RAM은 μ‹œμŠ€ν…œ μ‹œμž‘ μ‹œμ—λŠ” μ•Œ 수 μ—†λŠ” μƒνƒœκ°€ 되기 λ•Œλ¬Έμ— bootstrap program은 ROM μ•ˆμ— μ €μž₯λœλ‹€.

 

bootstrap program은 λ¨Όμ € κΈ°κ³„μ˜ μƒνƒœλ₯Ό μ§„λ‹¨ν•˜μ—¬ 이상이 μ—†λŠ”μ§€ ν™•μΈν•œλ‹€. 이후에 CPU Register, device controller, main memory λ“± μ‹œμŠ€ν…œ μ „λ°˜μ— 걸쳐 μ΄ˆκΈ°ν™”ν•œλ‹€. 이 μž‘μ—…μ΄ λλ‚˜λ©΄, bootstrap program은 운영체제λ₯Ό μ‹œμž‘ν•œλ‹€.

 


πŸ“š 2.10 운영체제 디버깅 operation-system debugging

디버깅은 ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œμ˜ μ‹œμŠ€ν…œ 였λ₯˜λ₯Ό λ°œκ²¬ν•˜κ³  μˆ˜μ •ν•˜λŠ” 것을 λ§ν•œλ‹€.

 

2.10.1 μž₯μ•  뢄석 failure analysis

➑️ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€νŒ¨ν–ˆμ„ λ•Œ, μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μ‚¬μš©ν•˜λ˜ λ©”λͺ¨λ¦¬λ₯Ό μΊ‘μ²˜ν•œ λ’€ 'core dump'λ₯Ό μ·¨ν•˜κ³  μ΄ν›„μ˜ 뢄석을 파일둜 μ €μž₯ν•œλ‹€.

➑️ 컀널 μž₯μ• λŠ” crash라고 λΆˆλ¦°λ‹€. ν•΄λ‹Ή 였λ₯˜ μ •λ³΄λŠ” 둜그 파일둜 μ €μž₯되고, λ©”λͺ¨λ¦¬μ˜ μƒνƒœκ°€ 'crash dump'에 μ €μž₯λœλ‹€.

 

2.10.2 μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§κ³Ό μ‘°μ • performance monitoring and tuning

병λͺ© 지점 bottlenecks을 μ œκ±°ν•¨μœΌλ‘œμ¨ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λ €κ³  ν•˜λŠ” 것도 디버깅이라고 ν•  수 μžˆλ‹€.

이에 병λͺ© 지점을 λ°œκ²¬ν•˜κΈ° μœ„ν•΄ μ‹œμŠ€ν…œ μ„±λŠ₯을 κ°μ‹œν•  수 μžˆμ–΄μ•Ό ν•˜λ©°, μ‹œμŠ€ν…œ λ™μž‘μ„ μΈ‘μ •ν•˜κ³  ν‘œμ‹œν•  수 μžˆλŠ” 방법을 κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€. (ex. μœˆλ„μš° μž‘μ—… κ΄€λ¦¬μž)

 

2.10.3 좔적 tracing

좔적 λ„κ΅¬λŠ” μ‹œμŠ€ν…œμ½œ 호좜 κ³Όμ •κ³Ό 같은 ꡬ체적인 μ΄λ²€νŠΈμ— λŒ€ν•œ 정보λ₯Ό λͺ¨μ€λ‹€. μ΄λŸ¬ν•œ μ •λ³΄λŠ” 운영체제λ₯Ό 더 λ‚˜μ€ λ°©ν–₯으둜 κ°œμ„ ν•  수 μžˆλ„λ‘ ν•œλ‹€.