Skip to content

Commit

Permalink
Update 2024-10-25-os.md
Browse files Browse the repository at this point in the history
  • Loading branch information
yulmwu committed Nov 7, 2024
1 parent bb84232 commit 54f5c0e
Showing 1 changed file with 36 additions and 1 deletion.
37 changes: 36 additions & 1 deletion _posts/fast/2024-10-25-os.md
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,42 @@ CPU가 인터럽트 요청을 받아들이기 위해선 플래그 레지스터

#### 2-1-7-3. 비순차적 실행

TODO
앞서 **데이터 해저드**에 대해 설명했다. 이는 명령어끼리의 의존성 때문인데, 그럼 의존성이 없는 명령어의 순서를 바꾸면 되지 않을까? 라는 생각을 할 수 있다.
이 생각이 바로 **비순차적 실행(Out-of-Order Execution, OoOE)**이라고 한다. 아래의 예시 의사코드를 보자.

```
1 M1 = 1 + 2
2 M2 = M1 + 3
3 M3 = 3 + 4
4 M4 = M3 + 5
```

이는 아래와 같이 표현될 수 있다.

| | t₁ | t₂ | t₃ | t₄ | t₅ | t₆ | t₇ | t₈ | t₉ | t₁₀ |
| ----- | ------- | ------- | ------- | ------- | ------- | ------ | ------- | ------ | ------- | ------ |
| I1 | Fetch | Decode | Execute | Store | | | | | | |
| I2 | | | | | Fetch | Decode | Execute | Store | | |
| I3 | | | | | | Fetch | Decode | Execute | Store | |
| I4 | | | | | | | Fetch | Decode | Execute | Store |

`I2``I1`이 처리된 후 실행될 수 있고, 그 이후 `I3`가 처리되기 때문에 그 중간은 비어있게 된다. 그럼 아래와 같이 바꾸면 어떨까?

```
1 M1 = 1 + 2
3 M3 = 3 + 4
4 M4 = M3 + 5
2 M2 = M1 + 3
```

| | t₁ | t₂ | t₃ | t₄ | t₅ | t₆ | t₇ | t₈ | t₉ | t₁₀ |
| ----- | ------- | ------- | ------- | ------- | ------- | ------ | ------- | ------ | ------- | ------ |
| I1 | Fetch | Decode | Execute | Store | | | | | | |
| I3 | | Fetch | Decode | Execute | Store | | | | | |
| I4 | | | Fetch | Decode | Execute | Store | | | | |
| I2 | | | | | Fetch | Decode | Execute | Store | | |

이렇게 순서를 바꾸도 결과엔 문제가 없다. `I1 I2``I3 I4`는 서로 의존성이 없고, `I1``I2` 사이에 들어와도 작동엔 문제가 없기 때문에 순서를 바꾸는것이 더욱 효율적이다.

### 2-1-8. 명령어 집합 구조

Expand Down

0 comments on commit 54f5c0e

Please sign in to comment.