diff --git a/blog/content/edition-2/posts/07-hardware-interrupts/index.ko.md b/blog/content/edition-2/posts/07-hardware-interrupts/index.ko.md index b868bdff..7bef3b59 100644 --- a/blog/content/edition-2/posts/07-hardware-interrupts/index.ko.md +++ b/blog/content/edition-2/posts/07-hardware-interrupts/index.ko.md @@ -280,16 +280,16 @@ pub fn _print(args: fmt::Arguments) { 위 함수는 `WRITER`에 대한 lock을 잠그고 `write_fmt`를 호출하며, 위 함수의 반환 직전에 `WRITER`에 대한 lock을 암묵적으로 해제합니다. `WRITER`에 대한 lock이 잠긴 상태에서 인터럽트가 발생하고, 해당 인터럽트의 처리 함수가 화면에 뭔가 출력하려 한다고 가정해봅시다. -시간 순서 | _start | 인터럽트 처리 함수 ----------|------|------------------ -0 | `println!` 호출 |   -1 | `print`가 `WRITER`를 잠금 |   -2 | | **인터럽트 발생**, 인터럽트 처리 함수 실행 시작 -3 | | `println!` 호출 | -4 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함 -5 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함 -… | | … -_never_ | _`WRITER` 잠금 해제_ | +| 시간 순서 | _start | 인터럽트 처리 함수 | +| --------- | ------------------------- | ----------------------------------------------- | +| 0 | `println!` 호출 |   | +| 1 | `print`가 `WRITER`를 잠금 |   | +| 2 | | **인터럽트 발생**, 인터럽트 처리 함수 실행 시작 | +| 3 | | `println!` 호출 | +| 4 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함 | +| 5 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함 | +| … | | … | +| _never_ | _`WRITER` 잠금 해제_ | `WRITER`에 대한 lock이 잠겨 있으니, 인터럽트 처리 함수는 해당 lock이 풀릴 때까지 기다립니다. 하지만 `_start` 함수는 인터럽트 처리 함수가 반환한 후에 실행을 재개하기 때문에 lock이 풀리지 않습니다. 그 결과, 시스템 전체가 응답 불가 상태가 됩니다. @@ -737,4 +737,4 @@ PS/2 키보드의 일부 설정을 변경하는 것이 가능한데, 예를 들 운영체제에서 타이머 인터럽트는 필수적인 존재입니다. 그 이유는 타이머 인터럽트를 사용해 주기적으로 실행 중인 프로세스를 멈추고 커널로 제어 흐름을 가져올 수 있기 때문입니다. 그 후 커널은 다른 프로세스를 실행시킬 수 있고, 여러 프로세스가 동시에 실행 중인 듯한 사용자 경험을 제공할 수 있습니다. -프로세스나 스레드를 만들려면 우선 그들이 사용할 메모리를 할당할 방법이 필요합니다. 다음 몇 글들에서는 메모리 할당 기능을 제공하기 위한 메모리 관리 (memory management)에 대해 알아보겠습니다. \ No newline at end of file +프로세스나 스레드를 만들려면 우선 그들이 사용할 메모리를 할당할 방법이 필요합니다. 다음 몇 글들에서는 메모리 할당 기능을 제공하기 위한 메모리 관리 (memory management)에 대해 알아보겠습니다.