์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์ค๋ธ์
- User Stack
- ํฌ๋ํํค ์ ๊ธ
- ํ์ด์ฌ
- pintos
- ๋คํธ์ํฌ
- ์ ์-์ ํฌ
- ๋ฐฑ์ค
- KRAFTON JUNGLE
- 4๊ธฐ
- ํํ ์ค
- ํฌ๋ํํค์ ๊ธ
- ์ ๋ํฐ
- ์๊ณ ๋ฆฌ์ฆ์์ -๋๋น์ฐ์ ํ์2
- c#
- anonymous page
- ์ถ์ํด๋์ค์์ธํฐํ์ด์ค
- ์๊ณ ๋ฆฌ์ฆ
- TiL
- C
- ์ด๋ฒคํธ ํจ์ ์คํ ์์
- ๋ค์ต์คํธ๋ผ
- BFS
- ํฌ๋ํํค ์ ๊ธ 4๊ธฐ
- ํฌ๋ํํค์ ๊ธ4๊ธฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- project3
- Unity
- kraftonjungle
- Today
- Total
๋ง๊ฐ๋ก๊ทธ
ํฌ๋ํํค ์ ๊ธ WEEK08 DAY66 - PintOS Project2 kernel panic error ๋ณธ๋ฌธ
ํฌ๋ํํค ์ ๊ธ WEEK08 DAY66 - PintOS Project2 kernel panic error
habbn 2024. 3. 14. 00:30๐2024.3.13
1.๋ฐฑ์ค
2. pintos - project2 kernel panic error ํด๊ฒฐ
๋ฐฑ์ค 1927 ์ต์ ํ
์ฒ์์ ๋ญ์ผ ๋๋ฌด ์ฝ์๋? ๋ผ๊ณ ์๊ฐํ๋ฉฐ ํ์์ง๋ง ๊ฒฐ๊ตญ ์๊ฐ ์ด๊ณผ..
๋ฐ๋ณด๊ฐ์ด ์ต์ ํ์ธ๋ฐ heapq๋ฅผ ์์ฐ๊ณ ํ๋ ค๊ณ ํ์๋ด.
heapq ์จ์ ์๋ฃ!
import heapq
import sys
input = sys.stdin.readline
N = int(input())
heap = []
for i in range(N):
x = int(input())
if x > 0:
heapq.heappush(heap, x)
if x == 0:
if len(heap) == 0:
print(0)
else:
print(heapq.heappop(heap))
PintOS - Project 2 USER PROGRMAS
๐ซKernel panic - thread_yield() ์๋ฌ....
pintos ๊ฐ์ ๋จธ์ ์ ํ์ผ์ ๋ฃ๊ธฐ ์ํด์ ๋น์ ์ ๋จผ์ ํ์ผ ์์คํ ํํฐ์ ์ด ์๋ ๋ชจ์ ๋์คํฌ(simulated disk)๋ฅผ ๋ง๋ค ์ ์์ด์ผ ํ๋ค.
pintos-mkdisk filesys.dsk 10
pintos --fs-disk filesys.dsk -p tests/userprog/args-single:args-single -- -q -f run 'args-single onearg'
์์ ์ฝ๋๋ ํ์ผ ์์คํ ํํฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์คํฌ๋ฅผ ์์ฑํ๊ณ , ํ์ผ ์์คํ ์ ํ์์ ๋ง๋ค๊ณ , args-single ์ด๋ผ๋ ์ด๋ฆ์ ํ๋ก๊ทธ๋จ(์ด๋ฒ ํ๋ก์ ํธ์ ๋๋ฒ์งธ ํ ์คํธ ์ผ์ด์ค)๋ฅผ ์ด๋ป๊ฒ ์ ๋์คํฌ์ ๋ง๋ค๊ณ , onearg ๋ผ๋ ์ธ์๋ฅผ ์ ๋ฌํด์ ์คํํ๋์ง(์ธ์๋ฅผ ๊ตฌํํ๋ ๋ถ๋ถ์ ๊ตฌํํด์ผ ์ธ์ ์ ๋ฌ์ด ๊ฐ๋ฅํ ๊ฒ๋๋ค) ์ ๋ํ ์์ฝ ์ฝ๋์ด๋ค.
์ด ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋๋ฉด
Kernel PANIC at ../../threads/vaddr.h:87 in vtop(): assertion
`is_kernel_vaddr (vaddr)' failed.
kernel panic์ ๋ง์ฃผํ๊ฒ ๋๋ค.
backtrace
Call stack: 0x800421874b 0x80042072c0 0x800420a92f 0x8004214d12 0x8004209704 0x8004209b22 0x800420762b
Translation of call stack:
0x000000800421874b: debug_panic (lib/kernel/debug.c:32)
0x00000080042072c0: thread_yield (threads/thread.c:340)
0x000000800420a92f: sema_up (threads/synch.c:124)
0x0000008004214d12: interrupt_handler (devices/disk.c:526)
0x0000008004209704: intr_handler (threads/interrupt.c:353)
0x0000008004209b22: intr_entry (threads/intr-stubs.o:?)
0x000000800420762b: kernel_thread (threads/thread.c:456)
์ด ์ค๋ฅ๋ ํ๋ก์ ํธ 1์์ priority sheduling์ ์ํด sema_up ํจ์์์ thread_yield ํจ์๋ฅผ ํธ์ถํ ๊ฒ์ด ๋ฌธ์ ์๋ค.
ํ์ผ ์์คํ ์์ sema_up์ ํธ์ถํ ๋ externel interrupt๋ฅผ ๋์ง ์์์ assert๊ฐ ๋ฐ์ํ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
๊ทธ๋์
thread.c ์์ thread_try_yield() ํจ์๋ฅผ ์์ฑํด์ฃผ๊ณ
void thread_try_yield(void){
if(!list_empty(&ready_list) && thread_current() != idle_thread && !(intr_context()))
thread_yield();
}
synch.c sema_up() ๋ถ๋ถ๋ ์์ ํ๋ฉด ์๋ฌ ํด๊ฒฐ!
void
sema_up (struct semaphore *sema) {
enum intr_level old_level;
ASSERT (sema != NULL);
old_level = intr_disable ();
if (!list_empty (&sema->waiters))
{
list_sort(&sema->waiters, cmp_priority, NULL);
//sema->waiters์ ์๋ ๋งจ ์ ์ฐ๋ ๋๋ฅผ ๊นจ์ด๋ค.
thread_unblock (list_entry (list_pop_front (&sema->waiters),
struct thread, elem));
}
sema->value++;
intr_set_level (old_level);
//cpu ์๋ณด
thread_try_yield();
}
ํ๋ก์ ํธ 2ํ๋ฉด์ ..
์ป์๊ฒ ์๋ค....
์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๊ฒ ๋ค....
๋ง๋งํ๋ค....
๋ด์ผ์ ๋ฌด์กฐ๊ฑด ํ๋๋ผ๋ ํ์ด๋ด์ผ๊ฒ ๋ค....