λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️ Computer Science

[μ‰½κ²Œ λ°°μš°λŠ” 운영체제] ch.5 ν”„λ‘œμ„ΈμŠ€ 동기화 - μ—°μŠ΅ & 심화 문제

by GroovyArea 2022. 11. 4.

μ—°μŠ΅ 문제

1. ν”„λ‘œμ„ΈμŠ€ κ°„ ν†΅μ‹ μ—μ„œ 데이터λ₯Ό μ–‘λ°©ν–₯으둜 전솑 κ°€λŠ₯ν•˜μ§€λ§Œ λ™μ‹œ 전솑은 λΆˆκ°€λŠ₯ν•˜κ³  νŠΉμ • μ‹œμ μ— ν•œμͺ½ λ°©ν–₯으둜만 전솑할 수 μžˆλŠ” 톡신 방식?

  • λ°˜μ–‘λ°©ν–₯ 톡신

2. μƒνƒœ λ³€ν™”λ₯Ό μ‚΄νŽ΄λ³΄κΈ° μœ„ν•΄ λ°˜λ³΅λ¬Έμ„ λ¬΄ν•œ μ‹€ν–‰ν•˜λ©° κΈ°λ‹€λ¦¬λŠ” 것?

  • λ°”μœ λŒ€κΈ° (busy waiting)
  • μžμ› λ‚­λΉ„μ˜ μ˜ˆμ‹œ

3. ν”„λ‘œμ„ΈμŠ€ κ°„ ν†΅μ‹ μ—μ„œ λŒ€κΈ°κ°€ μ—†λŠ” 톡신과 λŒ€κΈ°κ°€ μžˆλŠ” ν†΅μ‹ μ˜ 예

  • λŒ€κΈ° x : μ „μ—­ λ³€μˆ˜, 파일 방식
  • λŒ€κΈ° o : νŒŒμ΄ν”„, μ†ŒμΌ“ 방식

4. νŒŒμ΄ν”„λ₯Ό μ΄μš©ν•˜μ˜ 톡신할 λ•Œ νŒŒμ΄ν”„λ₯Ό 2개 μ‚¬μš©ν•˜λŠ” 이유?

  • μ–‘λ°©ν–₯ 톡신을 ν•˜κΈ° μœ„ν•¨μ΄λ‹€.
  • μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 각각 ν•˜λ‚˜μ˜ νŒŒμ΄ν”„λ₯Ό 읽고 μ“΄λ‹€.

5. 곡유 μžμ›μ„ λ³‘ν–‰μ μœΌλ‘œ μ½κ±°λ‚˜ μ“°λŠ” 상황?

  • 경쟁 쑰건 (race condition)

6. 곡유 μžμ›μ˜ μ ‘κ·Ό μˆœμ„œμ— 따라 μ‹€ν–‰ κ²°κ³Όκ°€ λ‹¬λΌμ§€λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ˜μ—­

  • μž„κ³„ ꡬ역 (critical section)

7. μž„κ³„κ΅¬μ—­ ν•΄κ²° 쑰건 쀑 ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„κ΅¬μ—­μ— 듀어갔을 λ•Œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λŠ” μž„κ³„κ΅¬μ—­μ— λ“€μ–΄κ°ˆ 수 μ—†λŠ” 쑰건?

  • μƒν˜Έ 배제 (mutual exclusion)
  • μž„κ³„κ΅¬μ—­μ—λŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ 쑴재 κ°€λŠ₯.

8. μž„κ³„ ꡬ역 ν•΄κ²° 쑰건 쀑 ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ 진행을 λ°©ν•΄ν•΄μ„œλŠ” μ•ˆ λœλ‹€λŠ” 쑰건?

  • μ§„ν–‰μ˜ μœ΅ν†΅μ„± (progress flexibility)

9. μž„κ³„ ꡬ역 문제λ₯Ό ν•˜λ“œμ›¨μ–΄μ μœΌλ‘œ ν•΄κ²°ν•œ λ°©μ‹μœΌλ‘œ, ν•˜λ“œμ›¨μ–΄μ˜ 지원을 λ°›μ•„ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 도쀑에 νƒ€μž„μ•„μ›ƒμ΄ 걸리지 μ•Šλ„λ‘ ν•˜λŠ” 방식?

  • 검사와 μ§€μ • (test - and - set)
  • νŽΈλ¦¬ν•œ λ°©μ‹μ΄μ§€λ§Œ busy wait을 μ‚¬μš©ν•˜λ―€λ‘œ μžμ›μ˜ λ‚­λΉ„κ°€ μžˆλ‹€.

10. μ„Έλ§ˆν¬μ–΄μ˜ Semaphore(n)μ—μ„œ n은 무엇을 κ°€λ¦¬ν‚€λŠ”κ°€?

  • 곡유 κ°€λŠ₯ν•œ μžμ›μ˜ 개수

11. μ„Έλ§ˆν¬μ–΄μ—μ„œ λ‚΄λΆ€ λ³€μˆ˜λ₯Ό RS라고 ν•  λ•Œ μ„Έλ§ˆν¬μ–΄ P()의 λ‚΄λΆ€ μ½”λ“œλ₯Ό μ“°μ‹œμ˜€

if(RS>) {
  then RS = RS - 1;
} else {
  block();
}

12. μ„Έλ§ˆν¬μ–΄μ—μ„œ λ‚΄λΆ€ λ³€μˆ˜λ₯Ό RS라고 ν•  λ•Œ μ„Έλ§ˆν¬μ–΄ V()의 λ‚΄λΆ€ μ½”λ“œλ₯Ό μ“°μ‹œμ˜€

RS = RS + 1;
wake_up();

13. μ„Έλ§ˆν¬μ–΄κ°€ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 경우λ₯Ό μ„€λͺ…

  • ν”„λ‘œμ„ΈμŠ€κ°€ μ„Έλ§ˆν¬μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μž„κ³„κ΅¬μ—­μ— λ°”λ‘œ λ“€μ–΄κ°„ 경우
  • P()λ₯Ό λ‘λ²ˆ 이상 μ‚¬μš©ν•˜μ—¬ wake_up μ‹ ν˜Έκ°€ λ―Έλ°œμƒν•œ 경우,
    ν”„λ‘œμ„ΈμŠ€ κ°„ 동기화가 이뀄지지 μ•ŠμœΌλ―€λ‘œ μ„Έλ§ˆν¬μ–΄μ˜ νμ—μ„œ λŒ€κΈ°ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ€ λ¬΄ν•œ λŒ€κΈ° μƒνƒœκ°€ λœλ‹€.

14. μ„Έλ§ˆν¬μ–΄μ˜ λ‚΄λΆ€ μ½”λ“œλ„ νƒ€μž„μ•„μ›ƒμ΄ 걸리면 λ¬Έμ œκ°€ λ°œμƒν•  μˆ˜λ„ μžˆλ‹€. κ·Έλž˜μ„œ λ‚΄λΆ€ μ½”λ“œλŠ” λ¬΄μ—‡μœΌλ‘œ λ³΄ν˜Έλ°›λŠ”κ°€?

  • P(), V()의 내뢀적 μ½”λ“œλŠ” 검사와 지정을 μ‚¬μš©ν•΄μ„œ 뢄리 싀행을 λ°©μ§€ν•œλ‹€.

15. 곡유 μžμ›μ„ λ‚΄λΆ€μ μœΌλ‘œ 숨기고 곡유 μžμ›μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ§Œ μ œκ³΅ν•¨μœΌλ‘œμ¨ μžμ›μ„ λ³΄ν˜Έν•˜κ³  ν”„λ‘œμ„ΈμŠ€ κ°„ 동기화λ₯Ό μ‹œν‚€λŠ” κ²ƒμœΌλ‘œ, μ„Έλ§ˆν¬μ–΄μ˜ 단점을 ν•΄κ²°ν•˜λ©΄μ„œ μž„κ³„κ΅¬μ—­ 문제λ₯Ό ν•΄κ²°ν•œ 방식?

  • λͺ¨λ‹ˆν„°

심화 문제

1. ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신을 톡신 λ°©ν–₯에 따라 λΆ„λ₯˜ν•˜μ—¬ μ„€λͺ…

  • 단방ν–₯ 톡신
    • ν•œ λ°©ν–₯으둜만 데이터 전솑 κ°€λŠ₯.
    • μ „μ—­ λ³€μˆ˜μ™€ νŒŒμ΄ν”„
  • λ°˜μ–‘λ°©ν–₯ 톡신
    • μ–‘λ°©ν–₯으둜 전솑 κ°€λŠ₯
    • λ™μ‹œ 전솑 λΆˆκ°€
    • 무전기
  • μ–‘λ°©ν–₯ 톡신
    • 데이터λ₯Ό λ™μ‹œμ— μ–‘λ°©ν–₯으둜 전솑 κ°€λŠ₯
    • 일반적인 톡신 ꡬ쑰

2. λŒ€κΈ°κ°€ μžˆλŠ” 톡신과 λŒ€κΈ°κ°€ μ—†λŠ” ν†΅μ‹ μ˜ 의미λ₯Ό μ„€λͺ…ν•˜κ³  μ μ ˆν•œ 예λ₯Ό μ œμ‹œν•˜μ‹œμ˜€.

  • λ°”μœ λŒ€κΈ° (busy waiting)
    • μƒνƒœ λ³€ν™”λ₯Ό μ‚΄νŽ΄λ³΄κΈ° μœ„ν•΄ λ°˜λ³΅λ¬Έμ„ 톡해 λ¬΄ν•œ μ‹€ν–‰ν•˜λ©° κΈ°λ‹€λ¦¬λŠ” 것.
    • 데이터가 도착함을 μ•Œλ €μ£ΌλŠ” 동기화λ₯Ό 톡해 ν•΄κ²°
    • μ‚¬μš©ν•  경우 운영 μ²΄μ œκ°€ μ•Œμ•„μ„œ μ•Œλ €μ€€λ‹€.
  1. λŒ€κΈ° O
    • 동기화 톡신
    • 동기화λ₯Ό μ§€μ›ν•˜λŠ” 톡신 방식
    • 데이터 λ„μ°©κΉŒμ§€ λŒ€κΈ° μƒνƒœ
    • νŒŒμ΄ν”„, μ†ŒμΌ“
  2. λŒ€κΈ° X
    • 비동기화 톡신
    • 데이터 μˆ˜μ‹ μͺ½μ€ λ°”μœ λŒ€κΈ° μ‚¬μš©
    • μ „μ—­ λ³€μˆ˜, 파일

3. μ‹€μƒν™œμ˜ 예λ₯Ό λ“€μ–΄ μž„κ³„κ΅¬μ—­ 문제λ₯Ό μ„€λͺ…

  • μ˜ν™”κ΄€ 동일 μ’Œμ„ λ™μ‹œ 예맀 상황

4. λ‹€μŒ μ½”λ“œμ˜ λ¬Έμ œμ μ„ μ„€λͺ…

μ‹¬ν™”λ¬Έμ œ 4번

  • μƒν˜Έ 배제 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” μ „ν˜•μ  μ˜ˆμ‹œ
  • 두 개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 while문을 μ‹€ν–‰ν•˜μ—¬ μž„κ³„ ꡬ역에 μ§„μž…ν•˜λŠ” 상황이닀.

5. λ‹€μŒ μ½”λ“œμ˜ λ¬Έμ œμ μ„ μ„€λͺ…

μ‹¬ν™”λ¬Έμ œ 5번

  • μ§„ν–‰μ˜ μœ΅ν†΅μ„± λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” μ „ν˜•μ  μ˜ˆμ‹œ
  • ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„κ΅¬μ—­μ— λ‘λ²ˆ μ§„μž…ν•˜κ³  싢어도 κ·ΈλŸ¬μ§€ λͺ»ν•œλ‹€.
  • μš°μ„ μˆœμœ„μ˜ μ˜λ―Έκ°€ μ—†λ‹€.

6. νŒŒμΌμ„ μ΄μš©ν•΄ TestλΌλŠ” 문자λ₯Ό μ£Όκ³  λ°›λŠ” μ½”λ“œ μž‘μ„±

#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>

void main() {
  int pid, fd;
    char buf[5];

    fd = open("test.txt", O_RDWR);
    pid = fork();

    if (pid < 0 || fd < 0)
        exit(-1);
    else if (pid == 0)
    {
        write(fd, "Test", 5);
        close(fd);
        exit(0);
    }
    else
    {
        wait(0);
        lseek(fd, 0, SEEK_SET);
        read(fd, buf, 5);
        printf("%s", buf);
        close(fd);
        exit(0);
    }
}
λ°˜μ‘ν˜•