ํฌ๋ํํค ์ ๊ธ WEEK07 DAY56 - PintOS(Alarm Clock - priority) / 7์ฃผ์ฐจ ํด์ฆ ๋ฆฌ๋ทฐ
๐2024.3.5
1. PintOS (Alarm Clock - Priority)
2. 7์ฃผ์ฐจ ํด์ฆ
3. ๋ฐฑ์ค
PintOS (Alarm Clock - Priority)
์ด์ PintOS Project 1 Alarm Clock Priority ์ ์ธํ๊ณ ๋ค ๊ตฌํํด์ ์ค๋ Priority ๋ถ๋ถ์ ๊ตฌํํ์๋ค.
์ฐ๋ฆฌ๊ฐ ์๊ฐํ Priority์ ์กฐ๊ฑด์ "๋ง์ผ ๊ฐ์ sleep_time์ ๊ฐ์ง ์ค๋ ๋๋ค์ด sleep_list์ ์์ ๋(๋์์ ๊นจ์ด๋๋ ์ค๋ ๋๋ค์ด ์ฌ๋ฌ ๊ฐ ์ผ ๋) ์ฐ์ ์์๋ก ๊ตฌ๋ถํ์ฌ ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋ ๋จผ์ ready_list์ ๋ฃ์ด์ค๋ค" ๊ณ ์๊ฐํ์๋ค.
๊ทธ๋์ greater_list๋ผ๋ ์ฐ์ ์์๋ฅผ ๋ด์ ํ๋ฅผ ๋ง๋ค๊ณ thread_wakeup ํจ์ ๋ถ๋ถ์์ ๋จผ์ sleep_list ๋งจ ์์ ์๋ ์ค๋ ๋๋ฅผ popํ sleep_pop_front_thread๋ฅผ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์ด์คฌ๋ค.
์ฐ์ ์์๊ฐ ๋์ ์์๋๋ก ์ ๋ ฌํด์ผํ๋๊น ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ฃผ๋ priority_greater boolํ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ ๋ ฌ์ํค๊ณ
greater_list์ ์ฝ์ ํด์ฃผ์๋ค.
๋ง์ง๋ง์ผ๋ก greater_list๊ฐ ๋น๊ธฐ ์ ๊น์ง ready_list์ ๋ฃ์ด์ฃผ์๋ค.
+ ์ถ๊ฐํ ์ฝ๋
void
thread_wakeup(int64_t ticks)
{
if(list_empty(&sleep_list))
return;
enum intr_level old_level;
//sleep_list์ ์์ ์ง์ ์ ๋ํ iterator๋ฅผ ๋ฐํํ์ฌ ํด๋น ์์๋ฅผ struct thread๋ก ์บ์คํ
struct thread *sleep_front_thread = list_entry(list_begin(&sleep_list),struct thread, elem);
struct thread *sleep_pop_front_thread;
while(sleep_front_thread->wakeup_tick <= ticks)
{
old_level = intr_disable();
sleep_front_thread->status = THREAD_READY;
/* alarm clock - priority */
sleep_pop_front_thread = list_entry(list_pop_front(&sleep_list), struct thread, elem);
list_insert_ordered(&greater_list, &sleep_pop_front_thread->elem , (list_less_func *) &priorty_greater, NULL);
// list_push_back(&ready_list, list_pop_front(&sleep_list));
sleep_front_thread = list_entry(list_begin(&sleep_list),struct thread, elem);
intr_set_level(old_level);
}
while(!list_empty(&greater_list))
{
old_level = intr_disable();
list_push_back(&ready_list, list_pop_front(&greater_list));
intr_set_level(old_level);
}
}
bool
priorty_greater(const struct list_elem *a, const struct list_elem *b, void *aux UNUSED) {
struct thread *ta = list_entry(a, struct thread, elem);
struct thread *tb = list_entry(b, struct thread, elem);
return ta->priority > tb->priority;
}
์ด๊ฒ ๋๋..?? ํ๋๋ฐ pass tests/threads/alarm-priority ...
7์ฃผ์ฐจ ํด์ฆ
[1] ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ๋ multiprocess์ multithread ์ค ํ๋๋ฅผ ์ ํํ๋ ๊ธฐ์ค์ ์ด๋ค ๊ฒ์ด ์๋์ง ๋ช ๊ฐ์ง ์ ์ํ์ธ์.
์์ ์ฑ VS ์์ ์ฌ์ฉ
์์คํ ์ ์์ ์ฑ์ด ๋งค์ฐ ์ค์ํ ๊ฒฝ์ฐ, ๋ฉํฐํ๋ก์ธ์ค๊ฐ ์ ํธ๋๋ค. ๋ฆฌ์์ค๊ฐ ์ ํ์ ์ธ ํ๊ฒฝ์์๋ ๋ฉํฐ ์ค๋ ๋๊ฐ ๋ ํจ์จ์ ์ผ ์ ์๋ค.
- ๋ค์ค ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ ๋ฐ ๋ฐ์ดํฐ ์ค์ผ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ ๋ค.
- ๋ค์ค ์ค๋ ๋๋ ํ๋์ ์ค๋ ๋๊ฐ ์์ธ๋ฅผ ๋ฐ์์ํค๋ฉด ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ์ํฅ์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก ์์ ์ฑ์ด ์๋์ ์ผ๋ก ๋ฎ๋ค.
๊ตฌํ์ ๋ณต์ก์ฑ
์ค๋ ๋๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ธํด ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ณต์กํด์ง ์ ์์ผ๋ฏ๋ก, ๊ฐ๋ฐ์์ ๋์์ฑ ์ ์ด์ ๋ํ ์ดํด๋๊ฐ ์ค์ํ๋ค
- ๋ฉํฐ ํ๋ก์ธ์ค์ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ์ด์ ์ฒด์ ์ ์ํด ๋ถ๋ฆฌ๋๋ฏ๋ก ์คํจํ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํ๋ ๊ฒ์ด ๋น๊ต์ ๊ฐ๋จํ๋ค.
์๋ต ์๊ฐ
๋ฉํฐ ์ค๋ ๋๋ ์ปจํ ์คํธ ์ค์์นญ์ด ๋น ๋ฅด๊ธฐ ๋๋ฌธ์, ๋ ๋น ๋ฅธ ์๋ต ์๊ฐ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ ์ ๋ฆฌํ ์ ์๋ค.
ํ๋ซํผ ๋ฐ ์ธ์ด ์ง์
์ฌ์ฉ ์ค์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๋ซํผ์ด ๋ฉํฐ์ค๋ ๋ ๋๋ ๋ฉํฐํ๋ก์ธ์ค ์ค ์ด๋ ์ชฝ์ ๋ ์ ์ง์ํ๋์ง๋ ์ค์ํ ์์๊ฐ ๋ ์ ์๋ค.
-> ์์ ์ฑ์ด ์ค์ํ ์์คํ ์์๋ ๋ค์ค ํ๋ก์ธ์ค, ๋น ๋ฅธ ์๋ต ๋ฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์น ์๋ฒ์ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ๋ค์ค ์ค๋ ๋๊ฐ ์ ํฉํ๋ค.
---> ์์ ํ ํ๋ ค๋ฒ๋ฆฐ ๋ฌธ์ ..
[2] ๋ฐ๋๋ฝ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ ๋ต์ ๋ ๊ฐ์ง ์ด์ ์ค๋ช ํ์์ค.
* ๋ฐ๋๋ฝ : ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์๋ก ์์์ ์ป์ง ๋ชปํ์ฌ ๋ค์ ์ฒ๋ฆฌ๋ฅผ ๋ชปํ๋ ์ํ
๋ฐ๋๋ฝ ํด๊ฒฐ ์ ๋ต
1. ๋ฐ๋๋ฝ ์๋ฐฉ (Deadlock Prevetion)
์ด ์ ๊ทผ๋ฒ์ ๋ฐ๋๋ฝ ๋ฐ์์ ์์ฒ์ ์ผ๋ก ์ฐจ๋จํ๋ค. ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ ๋ค ๊ฐ์ง ํ์ ์กฐ๊ฑด(์ํธ ๋ฐฐ์ , ์ ์ ์ ๋๊ธฐ, ๋น์ ์ , ์ํ ๋๊ธฐ) ์ค ์ ์ด๋ ํ๋๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ๋ฐ๋๋ฝ์ ๋ฐฉ์งํ๋ค. ์๋ฅผ ๋ค์ด ๋น์ ์ ์กฐ๊ฑด์ ์ ๊ฑฐํ๋ฉด ์ด๋ค ๋ฆฌ์์ค๋ ํ์ํ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ์ ์ ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฐ๋๋ฝ์ ๋ฐฉ์งํ ์ ์๋ค.
2. ๋ฐ๋๋ฝ ํํผ (Deadlock Avoidance)
๋ฐ๋๋ฝ ํํผ๋ ์์คํ ์ด ๋ฐ๋๋ฝ ์ํ๋ก ์ง์ ํ๋ ๊ฒ์ ํํผํ๋ ์ ๋ ฅ์ด๋ค. ์ด๋ฅผ ์ํด ์์คํ ์ ๋ฆฌ์์ค ํ ๋น ๊ฒฐ์ ์ ๋ฐ๋๋ฝ์ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๋ค. ๊ฐ์ฅ ์ ๋ช ํ ์๋ ๋ฑ ์ปค์ค ์๊ณ ๋ฆฌ์ฆ(Banker's Algorithm)์ผ๋ก, ์ด๋ ํ๋ก์ธ์ค์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๊ธฐ ์ ์ ์์ ์ํ๋ฅผ ์ ์งํ ์ ์๋์ง ํ์ธํ๋ค. ๋ง์ฝ ํ ๋น์ผ๋ก ์ธํด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์ํ์ด ์๋ค๋ฉด, ๋ฆฌ์์ค๋ ํ ๋น๋์ง ์๋๋ค.
3. ๋ฐ๋๋ฝ ํ์ง ๋ฐ ํ๋ณต (Deadlock Detection and Recovery)
์ด ์ ๋ต์ ์์คํ ์ด ๋ฐ๋๋ฝ์ ํ์งํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์กฐ์น๋ฅผ ์ทจํ๋ ๊ฒ์ ํฌํจํ๋ค. ๋ฐ๋๋ฝ ํ์ง๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฆฌ์์ค ํ ๋น ๊ทธ๋ํ๋ฅผ ๊ฒ์ฌํ์ฌ ์ํ ๋๊ธฐ ์กฐ๊ฑด์ ์ฐพ๋ ๊ฒ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์๋ค. ๋ฐ๋๋ฝ์ด ํ์ง๋๋ฉด, ์์คํ ์ ํ๋ก์ธ์ค๋ฅผ ์ค์งํ๊ฑฐ๋ ๋ฆฌ์์ค ํ ๋น์ ์ฝ๋ฐฑํ์ฌ ๋ฐ๋๋ฝ์ ํด๊ฒฐํ๋ค.
4. ์์์ ์ํธ ๋ฐฐ์ ์ ๊ฑฐ (Ignoring Mutual Exclusion)
์ผ๋ถ ๊ฒฝ์ฐ์, ๋ฆฌ์์ค์ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ ๊ฑฐํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฆฌ์์ค๊ฐ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๊ฑฐ๋ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ํด๋น ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ ๊ฑฐํจ์ผ๋ก์จ ๋ฐ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์๋ค.
---> ์ด์ ํด์ฆ ๊ณต๋ถํ๋ฉด์ ๋ดค๋ ๋ถ๋ถ์ธ๋ฐ ์ ๋๋ก ์๋ด์ ๋ต์ ์ ๋งคํ๊ฒ ์ ์๋ค.... ๋ค์๋ถํฐ ์ ๋๋ก ํ๋ํ๋ ๋ค ๊ผผ๊ผผํ ๋ด์ผ๊ฒ ๋ค
[3] Semphore์ Mutex์ ํน์ง๊ณผ ์ฃผ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
Semaphore๋ ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ํน์ ์ซ์๋ก ์ด๊ธฐํ๋๋ค. ์ด ์ซ์๋ ๋์์ ํด๋น ์์์ ์ ๊ทผํ ์ ์๋ ์ค๋ ๋์ ์ต๋ ์๋ฅผ ๋ํ๋ธ๋ค. Semaphore๋ ์ค๋ ๋๊ฐ ์์์ ์ฌ์ฉํ ๋๋ง๋ค ๊ฐ์ํ๊ณ , ์์์ ํด์ ํ ๋๋ง๋ค ์ฆ๊ฐํ๋ค.
Mutex(Mutual Exclusion)๋ ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ๋จ์ผ ์ค๋ ๋์๊ฒ๋ง ํ์ฉํ๋ค. ์ด๋ ์ฃผ๋ก ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค. Mutex๋ ์์ ๊ถ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ด, ์ ๊ธ์ ๊ฑด ์ค๋ ๋๋ง์ด ์ ๊ธ์ ํด์ ํ ์ ์๋ค.
์ด ๋ ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ ๋์์ฑ์ ๊ด๋ฆฌํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ด์ง๋ง, ์ฌ์ฉ๋๋ ์ํฉ๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ํ๋๋ค. Mutex๋ ๋ณด๋ค ์๊ฒฉํ ์ ์ด๊ฐ ํ์ํ ๋, Semaphore๋ ์ฌ๋ฌ ์์์ ๋ํ ๋์ ์ ๊ทผ์ ํ์ฉํ ๋, ํนํ Counting Semaphore๋ ์์์ ์๋์ด ์ ํ๋์ด ์์ ๋ ์ ์ฉํ๋ค.
-> ์ธ๋งํฌ์ด๋ ์๊ณ์์ญ์ ์ ๊ทผํ ์ ์๋ ์๊ฐ 1๊ฐ ์ด์์ด๊ณ , ๋ฎคํ ์ค๋ ์๊ณ์์ญ์ ์ ๊ทผํ ์ ์๋ ์๊ฐ 1๊ฐ์ด๋ค.
--> ๋ต ์ ์. ์ฝ์น๋์ด ์ํ๋ ๋ต๋ณ์ ์ธ๋งํฌ์ด์ ๋ฎคํ ์คํ ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์กฐ์จํ๊ธฐ ์ํ ๋๊ธฐํ ๊ธฐ๋ฒ์ธ๋ฐ, ์ธ๋งํฌ์ด๋ ์๊ณ์์ญ์ ์ ๊ทผํ ์ ์๋ ์๊ฐ 1๊ฐ ์ด์์ด๊ณ , ๋ฎคํ ์ค๋ ์๊ณ์์ญ์ ์ ๊ทผํ ์ ์๋ ์๊ฐ 1๊ฐ์ด๋ค. ์ธ๊ฑฐ ๊ฐ๋ค. ๋น์ค๋ฌด๋ฆฌํ๊ฒ ์ ์
[4] ๋ค์ ANSI C ํ๋ก๊ทธ๋จ์์ ์ถ๋ ฅ๋๋ ๋ด์ฉ์ ๋ฌด์์ธ๊ฐ?
#include <stdio.h>
int f(int x, int *py, int **ppz)
{
int y, z;
**ppz += 1;
z = **ppz;
*py += 2;
y = *py;
x += 3;
return x + y + z;
}
int main()
{
int c , *b , **a;
c = 4;
b = &c;
a = &b;
printf("&d\n", f(c , b, a));
return 0;
}
c = 4 , b = 4, a = 4
f ํจ์ ๋ด์์ **ppz (์ฆ, c) ๋ฅผ 1์ฆ๊ฐ ์ํค๋ฉด c์ ๊ฐ์ 5๊ฐ ๋๋ค. -> z = 5
*py(์ฆ, c)๋ฅผ 2 ์ฆ๊ฐ์ํค๋ฉด , c์ ๊ฐ์ 7์ด ๋๋ค. -> y = 7
x (c์ ๋ณต์ฌ๋ณธ) ์ 3 ์ฆ๊ฐ์ํค๋ฉด, x์ ๊ฐ์ 7์ด ๋๋ค. -> x = 7
7 + 7 + 5 = 19
---> ์ฐธ๊ณ ๋ก ์ด ๋ถ๋ถ์์ ์ค์๋ฅผ ํด์ 7+ 7+ 7 = 21์ ๋ต์ ์ ์ถ.... ๋ ์๊ทธ๋ฌ๋๊ณ ์ค์ค
[5] ๋ค์ C์ฝ๋์์ ๋ฐ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ฐพ๊ณ , ํด๊ฒฐ ๋ฐฉ์์ ์ ์ํ์์ค.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
char *description;
} item;
item* create_item(int data, const char *desc) {
item *new_item = (item *)malloc(sizeof(item));
if (new_item == NULL) {
return NULL;
}
new_item->data = data;
new_item->description = (char *)malloc(strlen(desc) + 1);
strcpy(new_item->description, desc);
return new_item;
}
int main() {
item *myItem = create_item(5, "Test Item");
printf("Item: %d, Description: %s\n",
myItem->data, myItem->description);
// ๋ค๋ฅธ ์์
์ํ
free(myItem); // ๋ฉ๋ชจ๋ฆฌ ํด์
return 0;
}
create_item ํจ์์์ item ๊ตฌ์กฐ์ฒด์ description ๋ฌธ์์ด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค. ๊ทธ๋ฌ๋ main ํจ์์์๋ ์ค์ง item ๊ตฌ์กฐ์ฒด์ ๋ํด์๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ ์๊ณ , description ํ๋์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ๋๋ฝ๋์ด ์๋ค. ์ฌ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์ํด main ํจ์์์ free(myItem->description); ์ ์ถ๊ฐํด์ผ ํ๋ค.
---> ํ ์ด ๋ถ๋ถ๋ ํ๋ ค๋ฒ๋ฆผ ์ ๋๋ก ๋ง์ ๋ฌธ์ ๊ฐ ์๋ค์...๋ฐ์ฑํฉ์๋ค...
๋ฐฑ์ค 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ
bfs ๋ฌธ์ ๋ค. ์ค๋๋ง์ bfs ๋ฌธ์ ํ์ด์ ๊ฐ์ ์์ด๋ฒ๋ ธ๋ค. ์๊ฐ๋ณด๋ค ์ด๋ ต์ง ์์ ๋ฌธ์ ์ธ๋ฐ ๊ฐ์ ์์ด๋ฒ๋ฆฐ ํ์ ๊ตฌํ์์ ์ฐ๋นํํ ๊ฒฐ๊ตญ gpt ๋์์ผ๋ก ์์ ํ๋ฉด์ ํ์๋ค.
๋ด์ผ๋ถํฐ bfs ๋ค์ ์์์ด๋ค..
from collections import deque
import sys
input = sys.stdin.readline
dx = [0, 1, 0, -1]
dy = [1, 0,-1, 0]
def bfs(x,y):
q = deque()
q.append((x,y))
baechu[x][y] = 0
while q:
x_ , y_ = q.popleft()
for i in range(4):
nx = x_ + dx[i]
ny = y_ + dy[i]
if nx < 0 or nx >= M or ny < 0 or ny >= N or baechu[nx][ny] == 0:
continue
if baechu[nx][ny] ==1:
q.append((nx,ny))
baechu[nx][ny] = 0
T = int(input())
for _ in range(T):
M,N,K = map(int,input().split())
baechu = [[0] * N for _ in range(M)]
for _ in range(K):
x,y = map(int,input().split())
baechu[x][y] = 1
cnt = 0
for i in range(M):
for j in range(N):
if baechu[i][j] == 1:
bfs(i,j)
cnt +=1
print(cnt)
.
.
.
์์ฆ ๋๋ฌด ํผ๊ณคํ๊ณ ํ์คํ PintOS ๋ค์ด๊ฐ๋๊น ๋จธ๋ฆฌ๊ฐ ๋ ์ํ์ ์ปจ๋์ ์ด ์ข์ง ์์ ๊ฒ ๊ฐ๋ค.
์์ ๊ฐ์ง ์์... ์ปจ๋์ ์กฐ์ ์ ์ ํด์ผ๊ฒ ๋คใ ใ