
운영체제 나초스 NachOS 과제 KThread와 Kernel 분석
본 내용은
"
운영체제 나초스 NachOS 과제 KThread와 Kernel 분석
"
의 원문 자료에서 일부 인용된 것입니다.
2024.09.15
문서 내 토픽
-
1. KThread.fork()KThread.fork() 메소드는 새로운 스레드를 생성한 뒤, 조건을 통해 스레드 생성을 위한 준비와 검증을 마치고서 새로운 스레드를 실행 대기열에 넣어 다른 스레드가 실행될 수 있도록 준비상태로 만든다.
-
2. KThread.runThread()KThread.runThread() 메소드는 스레드가 시작하고 종료될 때까지의 주요 동작을 관리한다. 스레드 시작 시 초기화 작업, 스레드 실행, 스레드 종료 처리 등의 기능을 수행한다.
-
3. KThread.yield()KThread.yield() 메소드는 현재 실행 중인 스레드의 시간을 양보하여 다른 스레드가 실행될 수 있도록 한다.
-
4. KThread.sleep()KThread.sleep() 메소드는 지정된 시간동안 스레드를 정지시키는 기능을 한다. 현재 실행 중인 스레드에 대해서만 동작하며, 스레드의 상태를 statusBlock으로 변경하고 다음 스레드를 실행시킨다.
-
5. KThread.join()KThread.join() 메소드는 자신이 하던 작업을 멈추고 다른 스레드가 지정된 시간동안 작업을 수행될 때 이용한다. 현재 스레드가 아닌 특정 스레드에 대해서만 동작한다는 점에서 sleep()과 차이가 있다.
-
6. KThread.runNextThread()KThread.runNextThread() 메소드는 Ready Queue에서 다음에 실행할 스레드를 가져와 실행시킨다. 만약 다음 스레드가 null이라면 idleThread를 다음 스레드로 지정한다.
-
7. KThread.run()KThread.run() 메소드는 CPU를 현재 스레드로 전환하고 실행시킨다. 인터럽트 비활성화, 문맥 교환, 이전 스레드 상태 복원 등의 기능을 수행한다.
-
8. KThread.restoreState()KThread.restoreState() 메소드는 스레드의 상태를 복원하는 기능을 한다. 인터럽트 비활성화, 현재 스레드 확인, TCB 확인 등의 검증을 수행한 후 스레드 상태를 복원한다.
-
9. KThread.saveState()KThread.saveState() 메소드는 인터럽트가 발생했을 때 현재 스레드의 상태정보 등을 저장해놓는 기능을 한다.
-
10. 정상 동작하지 않는 이유기존 코드와 달리 새로운 코드에서는 동기화를 사용하지 않아 스레드 간 동기화 문제가 발생한다. 새로운 스레드가 시작하지 않고 대기 상태에 머물러 있어 결과가 출력되지 않는 문제가 있다.
-
1. KThread.fork()KThread.fork()는 새로운 스레드를 생성하는 메서드입니다. 이 메서드는 현재 실행 중인 스레드의 복사본을 만들어 새로운 스레드를 생성합니다. 새로 생성된 스레드는 부모 스레드와 동일한 상태를 가지고 있으며, 부모 스레드와 독립적으로 실행됩니다. 이를 통해 병렬 처리를 구현할 수 있으며, 다양한 작업을 동시에 수행할 수 있습니다. 하지만 스레드 간 데이터 공유 및 동기화 문제를 고려해야 하며, 적절한 스레드 관리가 필요합니다.
-
2. KThread.runThread()KThread.runThread()는 새로 생성된 스레드를 실행하는 메서드입니다. 이 메서드는 스레드의 상태를 'READY'로 변경하고, 스레드 스케줄러에 의해 실행 대기열에 추가됩니다. 스레드 스케줄러는 실행 대기열에 있는 스레드 중 하나를 선택하여 실행합니다. KThread.runThread()를 통해 새로운 스레드를 실행할 수 있으며, 이를 통해 병렬 처리를 구현할 수 있습니다. 하지만 스레드 간 동기화 및 자원 관리에 주의를 기울여야 합니다.
-
3. KThread.yield()KThread.yield()는 현재 실행 중인 스레드가 자발적으로 CPU 사용권을 포기하고 다른 스레드에게 양보하는 메서드입니다. 이 메서드를 호출하면 현재 스레드의 상태가 'READY'로 변경되며, 스레드 스케줄러에 의해 다른 스레드가 선택되어 실행됩니다. KThread.yield()는 스레드 간 공평한 CPU 사용을 보장하고, 스레드 간 협력을 촉진하는 데 사용될 수 있습니다. 하지만 부적절한 사용은 스레드 간 경쟁 상황을 야기할 수 있으므로 주의해야 합니다.
-
4. KThread.sleep()KThread.sleep()은 현재 실행 중인 스레드를 일시적으로 중단시키는 메서드입니다. 이 메서드를 호출하면 현재 스레드의 상태가 'BLOCKED'로 변경되며, 지정된 시간 동안 실행이 중단됩니다. 이를 통해 스레드 간 동기화, 타이밍 제어, 리소스 관리 등의 작업을 수행할 수 있습니다. 하지만 부적절한 사용은 시스템 성능 저하를 초래할 수 있으므로 주의해야 합니다.
-
5. KThread.join()KThread.join()은 현재 실행 중인 스레드가 다른 스레드의 실행이 완료될 때까지 기다리는 메서드입니다. 이 메서드를 호출하면 현재 스레드의 상태가 'BLOCKED'로 변경되며, 지정된 스레드의 실행이 완료될 때까지 대기합니다. 이를 통해 스레드 간 동기화와 데이터 일관성을 보장할 수 있습니다. 하지만 부적절한 사용은 데드락 등의 문제를 야기할 수 있으므로 주의해야 합니다.
-
6. KThread.runNextThread()KThread.runNextThread()는 스레드 스케줄러에 의해 선택된 다음 스레드를 실행하는 메서드입니다. 이 메서드는 현재 실행 중인 스레드의 상태를 'READY'로 변경하고, 스레드 스케줄러에 의해 선택된 다음 스레드를 실행합니다. 이를 통해 스레드 간 공평한 CPU 사용을 보장할 수 있습니다. 하지만 부적절한 사용은 스레드 간 경쟁 상황을 야기할 수 있으므로 주의해야 합니다.
-
7. KThread.run()KThread.run()은 스레드의 실행 로직을 구현하는 메서드입니다. 이 메서드는 스레드가 실행될 때 호출되며, 스레드의 작업을 수행합니다. 개발자는 KThread.run() 메서드 내에 스레드의 실행 로직을 구현해야 합니다. 이를 통해 스레드의 동작을 정의할 수 있습니다. 하지만 부적절한 구현은 스레드 간 동기화 문제, 데드락, 리소스 경쟁 등의 문제를 야기할 수 있으므로 주의해야 합니다.
-
8. KThread.restoreState()KThread.restoreState()는 스레드의 상태를 복원하는 메서드입니다. 이 메서드는 스레드가 중단된 시점의 상태를 복원하여 스레드의 실행을 재개할 수 있게 합니다. 이를 통해 스레드의 실행을 효율적으로 관리할 수 있습니다. 하지만 부적절한 사용은 스레드 간 동기화 문제, 데이터 일관성 문제 등을 야기할 수 있으므로 주의해야 합니다.
-
9. KThread.saveState()KThread.saveState()는 현재 실행 중인 스레드의 상태를 저장하는 메서드입니다. 이 메서드는 스레드의 현재 상태, 레지스터 값, 스택 등의 정보를 저장합니다. 이를 통해 스레드의 실행을 중단하고 나중에 재개할 수 있습니다. 이는 스레드 관리, 스레드 간 동기화, 리소스 관리 등에 활용될 수 있습니다. 하지만 부적절한 사용은 데이터 손실, 스레드 간 동기화 문제 등을 야기할 수 있으므로 주의해야 합니다.
-
10. 정상 동작하지 않는 이유스레드가 정상적으로 동작하지 않는 이유는 다양할 수 있습니다. 스레드 간 동기화 문제, 데드락, 리소스 경쟁, 부적절한 스레드 관리, 스레드 생성 및 실행 오류 등이 그 원인이 될 수 있습니다. 이러한 문제를 해결하기 위해서는 스레드 간 상호작용, 자원 공유, 스레드 생명주기 관리 등을 면밀히 검토해야 합니다. 또한 적절한 동기화 기법, 스레드 스케줄링 전략, 오류 처리 메커니즘 등을 적용해야 합니다. 이를 통해 스레드가 안정적이고 효율적으로 동작할 수 있도록 해야 합니다.