<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">
	<channel>
		<title>System Software Laboratory</title>
		<link>https://sslab.konkuk.ac.kr</link>
		<description>Konkuk University</description>
		
				<item>
			<title><![CDATA[page eviction할 때 PTE, dirty bit]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2614]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
14번째 슬라이드 6p에서
2번 eviction된 page의 pte는 지워지는 건가요?
그리고 4번 새로 들어간 page는 처음에 dirty bit가 0이었다가 나중에 수정이 일어나서 1로 바뀌었다는 의미인가요?
감사합니다!]]></description>
			<author><![CDATA[답변 감사합니다]]></author>
			<pubDate>Sun, 19 Apr 2026 12:58:49 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[swap시 type bit관련 질문이 있습니다]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2613]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
수업 시간과 녹화 강의에서 스왑 아웃 시 기존 PTE의 비트(D, A, PCD 등)를 활용하여 스왑 파일의 인덱스처럼 사용한다고 설명해 주신 부분을 복습하다가 궁금한 점이 생겼습니다.
제가 리눅스 커널 코드를 찾아보니
for (type = 0; type &lt; nr_swapfiles; type++) {
		if (!(swap_info[type]-&gt;flags &amp; SWP_USED))
			break;
	}

와 같이 가용한 새로운 스왑 영역(type)을 찾아서 할당하는 방식이었습니다.
그렇다면 스왑 아웃될 때 기존 PTE에 있던 상태 값(D, A 등)의 데이터 자체를 유지해서 인덱스로 쓰는 것이 아니라, 해당 플래그들이 차지하던 비트의 물리적 공간에 새로운 스왑 type과 offset 정보를 덮어씌워서 재활용한다고 이해하는 것이 맞을까요?
기존 비트를 유지한다는 의미가 공간의 재활용을 뜻하는 것인지 질문드립니다.]]></description>
			<author><![CDATA[asdf]]></author>
			<pubDate>Sat, 18 Apr 2026 19:17:38 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[process 생성시 PTE]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2612]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
오늘 수업 하신 슬라이드 first touch에서 page directory, page table이 초기에는 다 0인 상태인데 process가 처음 실행될 때 pd, pt둘 다 만들어져야 하는 것 아닌가요?
만약 아니라면 접근하려는 값이 disk의 어디에 있는 줄 알고 가져올 수 있나요?
또 demand page의 경우 PTE가 swap entry와 같은지 궁금합니다. 감사합니다.]]></description>
			<author><![CDATA[시험공부재밌다]]></author>
			<pubDate>Thu, 16 Apr 2026 18:54:48 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[page fault에서 page valid에 대한 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2611]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
12번째 강의자료 Multi-Level page Tables, 15p demand paging에서 page fault에 invalid할때라고 나와있는데 valid한데 not present일때 page fault가 나는 것이 아닌가요?]]></description>
			<author><![CDATA[시험공부 재밌다]]></author>
			<pubDate>Thu, 16 Apr 2026 18:37:13 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[RaspberryPI Setup 환경 실습 관련 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2610]]></link>
			<description><![CDATA[안녕하세요, Lab6: RaspberryPI Setup 환경 실습 관련하여 질문드립니다.

현재 라즈베리파이와 Mac을 랜 케이블로 직접 연결하여 동일한 IP 대역(10.10.10.x)으로 설정한 상태입니다. 이 상태에서는 Mac에서 라즈베리파이로 SSH 및 scp 전송이 정상적으로 동작합니다.
하지만 가상머신(Ubuntu)은 Mac 내부의 NAT 네트워크(192.168.65.x)에 연결되어 있어, 가상머신에서 라즈베리파이(10.10.10.12)로 직접 ping이나 scp가 되지 않는 상황입니다.

PPT에서는 다음과 같이 가상머신에서 직접 라즈베리파이로 파일을 전송하는 흐름을 제시하고 있습니다.

* scp hello.ko pi@&lt;라즈베리파이 IP&gt;:~/

이에 따라 아래 두 가지 방법 중 어떤 방식으로 진행해도 되는지 문의드립니다.

1. 가상머신 → Mac → 라즈베리파이 순으로 scp를 이용해 파일을 전달하는 방식
2. 가상머신이 라즈베리파이와 동일한 LAN(10.10.10.x)에 직접 연결되도록 네트워크를 구성한 뒤, PPT와 동일하게 가상머신에서 직접 scp를 수행하는 방식

실습 및 과제 제출 시 반드시 2번과 같이 가상머신에서 라즈베리파이로 직접 전송하는 구조를 맞춰야 하는지, 아니면 1번과 같이 Mac을 경유하는 방식으로 진행해도 무방한지 확인 부탁드립니다.

감사합니다.]]></description>
			<author><![CDATA[.]]></author>
			<pubDate>Thu, 16 Apr 2026 17:49:01 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[ku_binder.h 질문드립니다.]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2609]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
커널 모듈과 라이브러리에서 구조체를 동일하게 사용하기위해, 둘다 같은 헤더를 사용하는식으로 구현하였습니다.
하여

#ifdef __KERNEL__
#include 
#else
#include 
#endif

이와 같인 커널인지 확인할수 있다는 방법을 찾았고, 이렇게 둘다 같이 헤더를 참조하게 하였는데 요구사항에 위반되는지 여쭤보고자 합니다.]]></description>
			<author><![CDATA[ㅇㅇ]]></author>
			<pubDate>Thu, 16 Apr 2026 16:58:06 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[KU_Binder 구현 관련 질문입니다]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2608]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
APIs for Service Servers에서 `kbinder_read(int snum, void *buf)`의 `buf`가
“fcode와 param을 저장하기 위한 destination buffer”라고 설명되어 있습니다.

이와 관련하여, 저는 `buf`에 전달되는 데이터를 위해 `fcode`와 `param`을 포함하는 구조체를 정의하여 사용하였습니다.
이때 데이터 구조(순서 및 크기)만 동일하게 유지된다면, 구조체가 아니거나, 구조체의 멤버 변수의 이름이 `fcode`, `param`과 다르더라도 동작이나 채점에 영향이 없는지 궁금합니다.]]></description>
			<author><![CDATA[킹왕짱티라노]]></author>
			<pubDate>Thu, 16 Apr 2026 03:18:10 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[Limited Direct Execution Protocol에 대한 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2605]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
강의자료 03 22페이지에서 타이머 인터럽트가 발생할 경우 커널 모드로 진입하기 전에 Save Uregs(A) to k-stack(A)를 하는 과정이 있습니다.
그런데, 커널모드로 진입하기 이전에 레지스터값을 커널 스택에 저장하는 것은 권한상 불가능한 것 같은데 이 명령은 유저 모드에서 동작하는게 맞을까요??
커널모드라고 보기에도 애매한것 같아 여쭤봅니다.]]></description>
			<author><![CDATA[김길동]]></author>
			<pubDate>Wed, 15 Apr 2026 14:52:32 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[5/1(금) 노동절 수업 관련]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2604]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
개강 이후 5/1(금) 노동절이 휴일로 지정되었는데, 우리는 원래 강의계획대로 일자 변경 없이 대면 실습수업을 진행하려고 합니다. 오늘 수업 시간에 이와 같이 공지했으나, 혹시 다른 안을 원하는 경우는 4/17(금) 오후 5시까지 답글을 달아주기 바랍니다. 다만, 휴강 후 보강 일시를 잡아야 할 경우는 저녁 늦은 시간 또는 주말도 될 수 있음을 감안하고 의견주기 바랍니다.]]></description>
			<author><![CDATA[진현욱]]></author>
			<pubDate>Wed, 15 Apr 2026 13:19:54 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[Linear Page Table과 Multi-Level Page Tables의 비교 슬라이드 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2603]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
안녕하세요, 12번째 강의자료 "Multi-Level Page Tables"에서 Page 11 - Linear Page Table과 Multi-Level Page Table의 구조적 비교를 설명하는 내용을 공부 공부하다가 헷갈리는 부분이 있어서 질문 남깁니다.

우선 PTBR이 가지는 값은 가상 페이지가 실제 물리 메모리 상에서 위치하는 Base 주소라고 알고 있습니다. 강의자료에선 그 값이 PFN201이라고 나와있는데요, 이때 궁금한 것이

1) PFN201이 가지고 있는 PTE에서의 PFN 값이 12, 13, 100 등 201보다 작은 값을 가지는 이유가 11장의 TLB가 가지는 "fully associative"한 속성때문인건지 궁금합니다.
2) 11장에서 나온 "PTE size of n" 이라는 것이 PTE 개수가 n개면 페이지의 개수 또한 n개라고 기억하고 있는데, 그림 상에서는 PFN201에 해당하는 PTE가 4개인 것처럼 보입니다. 이 부분을 어떻게 이해하면 좋을지가 궁금합니다.

읽어주셔서 감사합니다!]]></description>
			<author><![CDATA[OS Oh Yes]]></author>
			<pubDate>Wed, 15 Apr 2026 11:28:36 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[segmentation과 paging에서의 메모리 접근으로 인한 overhead 관련 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2602]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
강의 내용 복습 중 궁금한 점이 있어 질문드립니다.

Paging을 배울 때, page table이 메모리에 저장되어 있기 때문에 address translation 과정에서
page table을 한 번 참조하고 실제 데이터에 접근해야 하므로 메모리 접근이 추가되어 성능 저하가 발생한다고 이해했습니다.

그런데 segmentation에서도 제가 아는 바에 의하면 segment table이 메모리에 저장되어 있는 것으로 알고 있는데,
똑같이 주소 변환 과정에서 segment table을 참조한 후 실제 메모리에 접근해야 하므로
결과적으로 paging과 동일한 횟수의 메모리 접근이 발생하는 것이 아닌지 궁금합니다.

제가 생각하기로는 두 방식 모두 table 참조가 필요하다는 점에서 추가 메모리 접근이 발생하는 구조는 동일한 것처럼 보이는데,
강의에서는 paging의 경우에만 이러한 overhead가 강조된 것 같아 혼란이 있습니다.

혹시 이 차이가 segment table의 크기가 page table에 비해 상대적으로 작아서 레지스터 등에 캐시 형태로 저장 될 수 있기 때문인지,
아니면 실제 구현 방식에서 차이가 있기 때문인지 명확하게 이해하고 싶습니다.

제가 이해한 부분 중 잘못된 점이 있다면 함께 설명해주시면 감사하겠습니다.]]></description>
			<author><![CDATA[anonymous]]></author>
			<pubDate>Tue, 14 Apr 2026 19:18:20 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[service name]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2601]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
assignment 과제 kbinder_reg에서 중복된 service name 요청은 들어오지 않는다고 가정하고 하면 될까요?
추가적으로, close하는 기능은 없어도 되는지 궁금합니다]]></description>
			<author><![CDATA[ㅇㅇㅇ]]></author>
			<pubDate>Tue, 14 Apr 2026 17:43:26 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[EEVDF 스케줄러에서 새로운 프로세스의 vruntime 값]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2600]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
EEVDF 스케줄러에서 Lag 값을 V - v_i (System Virtual Time - vruntime) 으로 계산하게 되는데,
새로운 프로세스가 실행되는 경우 이미 System Virtual Time의 값은 클대로 커져있어
새로운 프로세스의 초기 vruntime 값이 중요하다고 생각이 드는데, 현재 리눅스에서 새로운 프로세스의 vruntime은 몇으로 설정되는지 궁금합니다.]]></description>
			<author><![CDATA[산체스]]></author>
			<pubDate>Mon, 13 Apr 2026 23:46:26 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[page, segmetaion 구조 차이 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2599]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
segmentation의 Address space에는 code, Heap, Stack이 들어간다고 알고 있습니다.

근데 왜 페이지에선 virtual address space에 OS가 맵핑되어 들어가는지 궁금합니다]]></description>
			<author><![CDATA[성이름]]></author>
			<pubDate>Mon, 13 Apr 2026 19:53:15 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[Waitqueue 동기화 관련 질문 추가 답변]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2598]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
안녕하십니까, 수강생 여러분. 수업 조교입니다.

 

wait_event 함수 사용에 답변 드릴게 있어 공지드립니다.

 

지난 수요일 Challenges Review 수업 시간 중에 질문 중 하나가, 

list_empty() 함수를 통해 리스트가 비어있는지를 확인할 때 race condition을 방지하기 위하여 

매 condition 확인 시 lock을 걸어야 하는게 아닌가 라는 질문이 있었습니다.

 

기존 실습에서 알려드린 wait_event_interruptible() 함수는 condition 확인 시 

lock을 자동으로 관리해주지 않기 때문에 condition 확인 시 spin_lock을 임의로 acquire 및 release가 어렵습니다.

 

race condition을 방지하기 위해서는 wait_event 내부에서 프로세스가 잠들기 전 직접 lock을 해제하여 

lock을 갖고 잠드는 것을 방지하고 wake up에 의해 깨어나서 condition을 확인할 때 lock을 획득하는 과정이 필요합니다.

 

해당 과정을 kernel 에서는 매번 깨어날때마다 condition 확인 할 때 자동으로 lock을 관리해주는 함수가 구현이 되어있으며, 

대표적으로 wait_event_interruptible_lock_irq() 함수가 있습니다.

기본적인 사용방법은 wait_event_interruptible()과 동일하나 lock을 보유한 상태에서 호출해야 합니다.

 

예시 코드)

spin_lock_irq(&amp;lock); // lock을 걸어주어야 함.

wait_event_interruptible_lock_irq(wq_head, condition, lock);

 

해당 함수에서 condition에 의해 탈출하든, 시그널에 의해 탈출하든 함수가 return 이 되면 lock을 보유하고 있는 상태입니다. 

따라서 함수의 호출 전에 lock을 얻고, 종료 후에는 critical section에서 작업 후 lock을 해제하는 코드를 반드시 사용해야 합니다.

 

만일 해당 함수를 사용하시려면 spin_lock / spin_unlock이 아닌 spin_lock_irq / spin_unlock_irq 함수를 사용하시어, spin_lock의 acquire 및 release를 해주셔야하오니, 유의해주시기 바랍니다.

- irq에 대한 내용은 추후 강의에서 설명드릴 예정입니다.]]></description>
			<author><![CDATA[sslab]]></author>
			<pubDate>Fri, 10 Apr 2026 17:48:35 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[segmentation + paging 관련 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2597]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
segmentation과 paging을 결합한 hybrid approach에서 헷갈리는 부분이 있는데 잘 이해한 게 맞는지 봐주시면 감사하겠습니다.

처음에는 수업에서 말씀하신 hybrid approach에서 external fragmentation이 발생한다고 말씀을 하셨는데 이 부분이 잘 이해가 가지 않았습니다. 

code, heap, stack segment 각각은 paging 방식으로 page 단위로 나누어져 물리 메모리의 page frame에 할당되므로, 이 자체로는 external fragmentation 문제가 발생하지 않는다고 생각했기 때문입니다.
 
해당 부분에 대해서 고민하던 중 실제로 문제가 생기는 부분은 segment 그 자체가 아니고 각각의 segment를 위한 page table 때문이라고 이해했습니다. heap과 stack을 위한 page table들은 크기가 가변적이며, 물리 메모리에 연속적으로 linear하게 배치되어야 하기 때문에 heap이나 stack의 성장에 따라 page table의 크기가 증가할 경우 적절한 연속 공간을 확보하기 어려워지고, 그 결과 external fragmentation이 발생한다고 이해했는데, 이러한 이해가 맞는지 궁금합니다.]]></description>
			<author><![CDATA[학생1]]></author>
			<pubDate>Thu, 09 Apr 2026 16:02:46 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[exit내 cdev_del 순서 질문입니다.]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2596]]></link>
			<description><![CDATA[[자료1. Kerenl api[1]-cdev_del], [자료2. LDD3 Chapter 3. p. 56 [2]]

안녕하세요,

저번 수업에서 exit 시 자원 해제 순서에 대해 질문드렸었는데, 스스로 내용을 좀 더 정리해 보았습니다.

결국 궁금한건 cdev_del을 어디서 호출하느냐인 것 같아 몇 가지 자료를 찾아보았습니다.

1. 우선 자료 1을 보면, cdev_del은 새로운 open 요청은 차단하지만 이미 장치를 열어둔 프로세스의 fops(R/W 등) 호출은 가능하다고 나옵니다. 즉, "이미 사용 중인 프로세스가 있어도 cdev_del을 호출하는 것 자체는 문제없다"고 이해했습니다.

2. 제가 cdev_del을 리소스 해제보다 먼저 호출해야 한다고 생각한 이유는 만약 리스트 메모리를 먼저 해제한 뒤 cdev_del을 호출하면, 그 사이(unlock ~ cdev_del)에 새로운 open 요청이 들어올 경우 이미 해제된 메모리에 접근하려고 하기 때문입니다.

3.  spin_lock 안에 cdev_del을 넣으면 안되는지 찾아보았는데, cdev_del 구현상 메모리 해제하는 부분이 sleep 될 가능성이 존재한다는 것을 확인했습니다[1]. spinlock 안에서 sleep은 금지되므로 lock 밖에서 호출해야 하는것으로 결정했습니다.

4. LLM을 통해서 추가로 찾아봤을 때, 자료2가 중요한 근거라고 합니다. cdev_add가 호출되는 즉시 장치가 'Live' 상태가 된다고 명시되어 있습니다. LLM은 이 말은 반대로 종료 시에는 cdev_del을 가장 먼저 수행해서 장치를 'Unlive' 상태로 만들어야만, 뒤따르는 자원 해제(kfree 등) 과정이 새로운 진입으로부터 안전해질 수 있다는 설계의 대칭성을 보여준다고 답변했습니다.

최대한 내용을 찾아보았는데, LLM을 사용해서 얻은 답변만으로 cdev_del이 먼저 호출되어야 하는게 맞는가라는 의문이 해소되지 않아서 질문드립니다.

최종 생각하는 exit 구조:
static void __exit exit(void){
    struct msg_list *cur_msg = 0;
    struct list_head *pos = 0, *q = 0;
    unsigned int i = 0;
    cdev_del(cd_dev);
    unregister_chrdev_region(dev_num, 1);


    spin_lock(&amp;lock);
    list_for_each_safe(pos, q, &amp;list_head){
        kfree();
    }
    spin_unlock(&amp;lock);
}


[1] "The Linux Kernel API — The Linux Kernel  documentation". no date, https://www.kernel.org/doc/html/v4.14/core-api/kernel-api.html?highlight=cdev_del
[2] "This is the Title of the Book, eMatter Edition", O’Reilly &amp; Associates, Inc., January 2005, https://static.lwn.net/images/pdf/LDD3/ch03.pdf]]></description>
			<author><![CDATA[123]]></author>
			<pubDate>Thu, 09 Apr 2026 12:21:50 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[KU_Binder 구현 관련 질문입니다.]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2594]]></link>
			<description><![CDATA[안녕하세요.
KU_Binder 과제에서 궁금한 내용 두 가지 부분에 대해 질문드립니다.
현재 서비스 서버 1개가 서비스 1개를 전담하고,
클라이언트는 해당 서비스의 request queue에 요청을 등록하는 구조로 구현한 상태입니다.

1. Request Queue 재확인 (Double-Check) 관련
- 클라이언트가 요청을 추가한 뒤 서버를 깨우면, 서버가 lock을 잡고 queue에 접근합니다.
- 보통 멀티 서버에서는 lock 획득 후 queue가 비어 있지 않은지 다시 확인하는 것으로 알고 있습니다.
- 1:1 대응 구조인 경우에도 lock 내부에서 queue empty 여부를 다시 확인하는 로직이 필수인지, 아니면 과제 범위에서는 생략해도 무관한지 궁금합니다.

 2. wait_event_interruptible() 사용 시 서버 종료 처리 관련
- 현재 커널 함수들을 (kbinder_read())를 wait_event_interruptible()로 구현하였고,
- 서버가 Ctrl+C로 종료될 때 발생하는 인터럽트 반환값을 확인하여 return 처리함으로써 rmmod/insmod 문제는 해결했습니다.
- 이 확인 절차가 없으면, 불필요한 로직을 실행해서 커널이 깨졌었습니다.

- 저렇게 처리 후 서버가 종료될 때 서비스 테이블에 등록된 정보를 함께 제거해야 하는지 궁금합니다.
- 등록 해제 로직이 없다 보니 Ctrl+C 이후 재실행 시 이름 중복으로 인해 등록 실패가 발생하는데
- 단순히 인터럽트 반환 처리만 해도 되는지, 아니면 종료 시 자원을 정리하는 로직까지 포함하는 것인지 문의드립니다.]]></description>
			<author><![CDATA[123]]></author>
			<pubDate>Mon, 06 Apr 2026 22:03:40 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
				<item>
			<title><![CDATA[[과제1] 관련 질문]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2593]]></link>
			<description><![CDATA[------------------------------------------수업게시판 규칙------------------------------------------------
커뮤니티가 아닌 공적인 수업 게시판으로 서로 간의 예의를 지켜야 합니다.
비밀 게시물의 경우 확인하지 않고 답변해드리지도 않습니다.
----------------------------------------------------------------------------------------------------------
1. Single ready queue 구현 방식 3가지를 제시해주셨는데 방식에 따라 점수 차이가 있을까요?

2. 문서 작성 기준이 설계 및 구현 부분만 3페이지를 채워야 하는건가요?]]></description>
			<author><![CDATA[성이름]]></author>
			<pubDate>Mon, 06 Apr 2026 21:17:47 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=33"><![CDATA[2026 Operating System]]></category>
		</item>
				<item>
			<title><![CDATA[Exclusive NonExclusive wait]]></title>
			<link><![CDATA[https://sslab.konkuk.ac.kr/?kboard_content_redirect=2592]]></link>
			<description><![CDATA[exclusive wait과 non-exclusive wait을 혼용해서 쓰면, non-exclusive wait이 어느 정도 빈번하게 발생하는 상황에서
exclusive wait이 wake up에 의해 깼을 때, 자원을 할당 받지 못하고 다시 wait이 된다면 queue의 tail에 추가되는 것일까요?
이렇게 되면 해당 wait이 starvation 상태가 될 확률이 높을 것 같은데 추가적으로 exclusive wait의 스케줄링 우선순위를 non-exclusive wait보다 더 높게 해주는지 궁금합니다.]]></description>
			<author><![CDATA[ㅇㅇㅇ]]></author>
			<pubDate>Mon, 06 Apr 2026 19:05:48 +0000</pubDate>
			<category domain="https://sslab.konkuk.ac.kr/?kboard_redirect=34"><![CDATA[2026 Embedded System Software]]></category>
		</item>
			</channel>
</rss>