Skip to content
Snippets Groups Projects
Commit 9ec32089 authored by 홍 유빈's avatar 홍 유빈
Browse files

Update 1. Intoduction.md

parent 103a8bc7
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
이 과제에서는 최소한의 기능을 가진 스레드 시스템을 제공합니다. 여러분의 과제는 이 시스템의 기능을 확장하여 동기화 문제를 더 깊이 이해하는 것입니다. 이 과제는 주로 `threads` 디렉토리에서 진행되며, 일부 작업은 `devices` 디렉토리에서 수행됩니다. 컴파일은 threads 디렉토리에서 이루어져야 합니다. 프로젝트 설명을 읽기 전에 `Synchronization`(동기화) 자료를 최소한 훑어보는 것이 좋습니다. 이 과제에서는 최소한의 기능을 가진 스레드 시스템을 제공합니다. 여러분의 과제는 이 시스템의 기능을 확장하여 동기화 문제를 더 깊이 이해하는 것입니다. 이 과제는 주로 `threads` 디렉토리에서 진행되며, 일부 작업은 `devices` 디렉토리에서 수행됩니다. 컴파일은 threads 디렉토리에서 이루어져야 합니다. 프로젝트 설명을 읽기 전에 `Synchronization`(동기화) 자료를 최소한 훑어보는 것이 좋습니다.
## 배경 지식 ## 배경 지식
### 스레드 이해하기 ### 스레드 이해하기
...@@ -20,10 +21,12 @@ GDB 디버거를 사용하여 컨텍스트 전환의 동작을 천천히 추적 ...@@ -20,10 +21,12 @@ GDB 디버거를 사용하여 컨텍스트 전환의 동작을 천천히 추적
Warning: Pintos에서는 각 스레드에 4kB 미만의 작은, 고정된 실행 스택이 할당됩니다. 커널은 스택 오버플로를 감지하려고 하지만 완벽하게 감지할 수는 없습니다. 예를 들어, `int buf[1000];`와 같은 큰 데이터 구조를 비정적 지역 변수로 선언하면 스택 오버플로로 인해 예기치 않은 커널 패닉 등과 같은 문제가 발생할 수 있습니다. 스택 할당 대신 페이지 할당자와 블록 할당자를 사용할 수 있습니다. (자세한 내용은 Memory Allocation을 참조하십시오.) Warning: Pintos에서는 각 스레드에 4kB 미만의 작은, 고정된 실행 스택이 할당됩니다. 커널은 스택 오버플로를 감지하려고 하지만 완벽하게 감지할 수는 없습니다. 예를 들어, `int buf[1000];`와 같은 큰 데이터 구조를 비정적 지역 변수로 선언하면 스택 오버플로로 인해 예기치 않은 커널 패닉 등과 같은 문제가 발생할 수 있습니다. 스택 할당 대신 페이지 할당자와 블록 할당자를 사용할 수 있습니다. (자세한 내용은 Memory Allocation을 참조하십시오.)
## 소스 파일 ## 소스 파일
아래는 `threads` 디렉토리와 `include/threads` 디렉토리에 있는 파일들에 대한 간략한 개요입니다. 이 코드의 대부분은 수정할 필요가 없지만, 이 개요를 통해 어떤 코드를 살펴봐야 할지 감을 잡을 수 있기를 바랍니다. 아래는 `threads` 디렉토리와 `include/threads` 디렉토리에 있는 파일들에 대한 간략한 개요입니다. 이 코드의 대부분은 수정할 필요가 없지만, 이 개요를 통해 어떤 코드를 살펴봐야 할지 감을 잡을 수 있기를 바랍니다.
### threads 코드 ### threads 코드
`loader.S`, `loader.h` `loader.S`, `loader.h`
...@@ -131,6 +134,7 @@ PC 스피커에서 톤을 생성할 수 있는 드라이버입니다. ...@@ -131,6 +134,7 @@ PC 스피커에서 톤을 생성할 수 있는 드라이버입니다.
8254 프로그래밍 가능 인터럽트 타이머(PIT)를 구성하는 코드입니다. 이 코드는 각 디바이스가 PIT의 출력 채널 중 하나를 사용하기 때문에 `devices/timer.c``devices/speaker.c` 모두에서 사용됩니다. 8254 프로그래밍 가능 인터럽트 타이머(PIT)를 구성하는 코드입니다. 이 코드는 각 디바이스가 PIT의 출력 채널 중 하나를 사용하기 때문에 `devices/timer.c``devices/speaker.c` 모두에서 사용됩니다.
### lib 코드 ### lib 코드
마지막으로 `lib``lib/kernel`에는 유용한 라이브러리 루틴이 들어 있습니다. (`lib/user`는 프로젝트 2부터 사용자 프로그램에서 사용되지만 커널의 일부는 아닙니다.) 다음은 몇 가지 자세한 내용 입니다: 마지막으로 `lib``lib/kernel`에는 유용한 라이브러리 루틴이 들어 있습니다. (`lib/user`는 프로젝트 2부터 사용자 프로그램에서 사용되지만 커널의 일부는 아닙니다.) 다음은 몇 가지 자세한 내용 입니다:
...@@ -171,6 +175,7 @@ PC 스피커에서 톤을 생성할 수 있는 드라이버입니다. ...@@ -171,6 +175,7 @@ PC 스피커에서 톤을 생성할 수 있는 드라이버입니다.
`printf()` 및 몇 가지 다른 함수를 구현합니다. `printf()` 및 몇 가지 다른 함수를 구현합니다.
## 동기화 ## 동기화
적절한 동기화는 이러한 문제를 해결하는 데 중요한 부분입니다. 모든 동기화 문제는 인터럽트를 끄면 쉽게 해결할 수 있습니다. 인터럽트가 꺼져 있는 동안에는 동시성이 없어지므로 경쟁상태(Race Condition)가 될 가능성이 없습니다. 모든 동기화 문제를 이런 방식으로 해결하고 싶지만 그렇게 하면 안됩니다. 대신 세마포어, 락(locks) 및 조건 변수를 사용하여 대부분의 동기화 문제를 해결하세요. 동기화에 대한 투어 섹션(`Synchronization` 참조)이나 어떤 상황에서 어떤 동기화 기본 요소를 사용할 수 있는지 확실하지 않은 경우 `threads/synch.c`의 주석을 읽어보세요. 적절한 동기화는 이러한 문제를 해결하는 데 중요한 부분입니다. 모든 동기화 문제는 인터럽트를 끄면 쉽게 해결할 수 있습니다. 인터럽트가 꺼져 있는 동안에는 동시성이 없어지므로 경쟁상태(Race Condition)가 될 가능성이 없습니다. 모든 동기화 문제를 이런 방식으로 해결하고 싶지만 그렇게 하면 안됩니다. 대신 세마포어, 락(locks) 및 조건 변수를 사용하여 대부분의 동기화 문제를 해결하세요. 동기화에 대한 투어 섹션(`Synchronization` 참조)이나 어떤 상황에서 어떤 동기화 기본 요소를 사용할 수 있는지 확실하지 않은 경우 `threads/synch.c`의 주석을 읽어보세요.
...@@ -187,6 +192,7 @@ Pintos 프로젝트에서 인터럽트를 비활성화하여 가장 잘 해결 ...@@ -187,6 +192,7 @@ Pintos 프로젝트에서 인터럽트를 비활성화하여 가장 잘 해결
제출 시 바쁜 대기(busy waiting)가 없어야 합니다. `thread_yield()`를 호출하는 타이트 루프는 바쁜 대기의 한 형태입니다. 제출 시 바쁜 대기(busy waiting)가 없어야 합니다. `thread_yield()`를 호출하는 타이트 루프는 바쁜 대기의 한 형태입니다.
## 개발 제안 ## 개발 제안
과거에는 많은 그룹이 과제를 여러 부분으로 나누고, 각 그룹원이 마감일 직전까지 각자의 작업을 한 다음, 그때 그룹이 다시 모여 코드를 결합하고 제출했습니다. 이는 좋지 않은 방법입니다. 이 방법은 권장하지 않습니다. 이렇게 하는 그룹은 종종 두 가지 변경 사항이 서로 충돌하여 마지막에 많은 디버깅이 필요합니다. 이렇게 한 그룹 중 일부는 컴파일이나 부팅조차 되지 않은 코드를 제출하여 테스트를 통과하지 못했습니다. 과거에는 많은 그룹이 과제를 여러 부분으로 나누고, 각 그룹원이 마감일 직전까지 각자의 작업을 한 다음, 그때 그룹이 다시 모여 코드를 결합하고 제출했습니다. 이는 좋지 않은 방법입니다. 이 방법은 권장하지 않습니다. 이렇게 하는 그룹은 종종 두 가지 변경 사항이 서로 충돌하여 마지막에 많은 디버깅이 필요합니다. 이렇게 한 그룹 중 일부는 컴파일이나 부팅조차 되지 않은 코드를 제출하여 테스트를 통과하지 못했습니다.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment