mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-17 23:07:50 +00:00
Format markdown tables and add newline at end of file
This commit is contained in:
@@ -280,16 +280,16 @@ pub fn _print(args: fmt::Arguments) {
|
|||||||
|
|
||||||
위 함수는 `WRITER`에 대한 lock을 잠그고 `write_fmt`를 호출하며, 위 함수의 반환 직전에 `WRITER`에 대한 lock을 암묵적으로 해제합니다. `WRITER`에 대한 lock이 잠긴 상태에서 인터럽트가 발생하고, 해당 인터럽트의 처리 함수가 화면에 뭔가 출력하려 한다고 가정해봅시다.
|
위 함수는 `WRITER`에 대한 lock을 잠그고 `write_fmt`를 호출하며, 위 함수의 반환 직전에 `WRITER`에 대한 lock을 암묵적으로 해제합니다. `WRITER`에 대한 lock이 잠긴 상태에서 인터럽트가 발생하고, 해당 인터럽트의 처리 함수가 화면에 뭔가 출력하려 한다고 가정해봅시다.
|
||||||
|
|
||||||
시간 순서 | _start | 인터럽트 처리 함수
|
| 시간 순서 | _start | 인터럽트 처리 함수 |
|
||||||
---------|------|------------------
|
| --------- | ------------------------- | ----------------------------------------------- |
|
||||||
0 | `println!` 호출 |
|
| 0 | `println!` 호출 | |
|
||||||
1 | `print`가 `WRITER`를 잠금 |
|
| 1 | `print`가 `WRITER`를 잠금 | |
|
||||||
2 | | **인터럽트 발생**, 인터럽트 처리 함수 실행 시작
|
| 2 | | **인터럽트 발생**, 인터럽트 처리 함수 실행 시작 |
|
||||||
3 | | `println!` 호출 |
|
| 3 | | `println!` 호출 |
|
||||||
4 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함
|
| 4 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함 |
|
||||||
5 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함
|
| 5 | | `print`가 이미 잠긴 `WRITER`를 또 잠그려고 함 |
|
||||||
… | | …
|
| … | | … |
|
||||||
_never_ | _`WRITER` 잠금 해제_ |
|
| _never_ | _`WRITER` 잠금 해제_ |
|
||||||
|
|
||||||
`WRITER`에 대한 lock이 잠겨 있으니, 인터럽트 처리 함수는 해당 lock이 풀릴 때까지 기다립니다. 하지만 `_start` 함수는 인터럽트 처리 함수가 반환한 후에 실행을 재개하기 때문에 lock이 풀리지 않습니다. 그 결과, 시스템 전체가 응답 불가 상태가 됩니다.
|
`WRITER`에 대한 lock이 잠겨 있으니, 인터럽트 처리 함수는 해당 lock이 풀릴 때까지 기다립니다. 하지만 `_start` 함수는 인터럽트 처리 함수가 반환한 후에 실행을 재개하기 때문에 lock이 풀리지 않습니다. 그 결과, 시스템 전체가 응답 불가 상태가 됩니다.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user