<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dus_snp.log</title>
        <link>https://velog.io/</link>
        <description>Live a life you will remember</description>
        <lastBuildDate>Mon, 17 Nov 2025 12:11:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dus_snp.log</title>
            <url>https://velog.velcdn.com/images/dus_snp/profile/2bb9b73a-1702-4445-b37b-ddb056017ca2/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dus_snp.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dus_snp" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[랩미팅 논문 발표 요약3]]></title>
            <link>https://velog.io/@dus_snp/%EB%9E%A9%EB%AF%B8%ED%8C%85-%EB%85%BC%EB%AC%B8-%EB%B0%9C%ED%91%9C-%EC%9A%94%EC%95%BD3</link>
            <guid>https://velog.io/@dus_snp/%EB%9E%A9%EB%AF%B8%ED%8C%85-%EB%85%BC%EB%AC%B8-%EB%B0%9C%ED%91%9C-%EC%9A%94%EC%95%BD3</guid>
            <pubDate>Mon, 17 Nov 2025 12:11:37 GMT</pubDate>
            <description><![CDATA[<h3 id="resource-aware-dynamic-scheduling-for-tasks-with-deadline-constraints-on-edge-computing-systems">Resource-Aware Dynamic Scheduling for Tasks with Deadline Constraints on Edge Computing Systems</h3>
<p>IEEE TRANSACTIONS ON CLOUD COMPUTING
Wenbiao Cao, Xiaoyong Tang, Tan Deng, Ronghui Cao, and Keqin Li
<a href="https://ieeexplore.ieee.org/abstract/document/11143954">https://ieeexplore.ieee.org/abstract/document/11143954</a></p>
<h2 id="연구-배경">연구 배경</h2>
<h4 id="aiot-발전으로-mecmulti-access-edge-computing-중요성-증대">AIoT 발전으로 MEC(Multi-access Edge Computing) 중요성 증대</h4>
<p>AIoT와 IoT의 발전으로 데이터 소스와 가까운 위치에서 분산 연산 수요 및 지연 민감 서비스 급증</p>
<p>엣지 컴퓨팅은 코어 혼잡 완화 및 QoS 향상에 효과적
그러나, 엣지 환경은 다음과 같은 한계 존재</p>
<ul>
<li>자원 이질성(Heterogeneity)</li>
<li>자원 경쟁(Resource competition)</li>
<li>마감시간 제약(Deadline Constraints)</li>
</ul>
<p>핵심 과제 : 제한된 이질적 리소스와 동적 요구사항의 충돌
<img src="https://velog.velcdn.com/images/dus_snp/post/8c4f644d-858e-4d03-a9de-bcdcfa5f3a28/image.png" alt=""></p>
<h2 id="해당-논문의-edge-node에-대한-정의">해당 논문의 Edge-Node에 대한 정의</h2>
<p>Firstly, edge nodes have obvious heterogeneity in terms of resource type, performance, and architecture.
Secondly, resource competition is widely present in edge networks.</p>
<p>Such as gateways(access points), local servers, small data centers, and even high-performance terminal devices are geographically distributed.</p>
<h2 id="관련-연구로-보는-주요-문제점">관련 연구로 보는 주요 문제점</h2>
<h4 id="task-dispatching-and-scheduling-in-edge-computing">Task Dispatching and Scheduling in Edge Computing</h4>
<p>대부분 정적인 태스크 처리 시간을 가정하며, 동적 자원 변화 및 경쟁 상황은 충분히 고려하지 못함</p>
<h4 id="heterogeneous-scheduling-with-deadline-constraints">Heterogeneous Scheduling with Deadline Constraints</h4>
<p>대부분 정적 자원 할당(static allocation) 기반이며, 온라인 자원 경쟁(online resource competition) 은 다루지 않음</p>
<h4 id="resource-aware-dynamic-task-scheduling">Resource-aware Dynamic Task Scheduling</h4>
<p>대부분 오프라인 모델에 의존하고 있으며, 이는 실제 동적 변화를 시의적절하게 반영할 수 없음</p>
<p><strong>따라서 자원 인식(Resource-aware) 관점에서 동적 스케줄링 알고리즘을 제안하여 
데드라인을 만족하면서 시스템 자원 효율을 높이고자 함</strong></p>
<h2 id="핵심-아이디어">핵심 아이디어</h2>
<h4 id="ratgsresource-aware-task-grouping-scheduling-strategy">RATGS(Resource-Aware Task Grouping Scheduling Strategy)</h4>
<p>제한된 리소스로 최대한 많은 요청을 완료하는 것이 목표
데드라인 제약이 있는 태스크의 효과적인 스케줄링에 초점</p>
<ol>
<li>Task Regrouping &amp; Priority Response (Algorithm 1)</li>
<li>Resource-aware Greedy Scheduling (Algorithm 2)</li>
<li>Task Adjusting (DI/HRI/MRR, Algorithm 3)</li>
<li>Rescheduling (Algorithm 4)<h2 id="핵심-목표">핵심 목표</h2>
<img src="https://velog.velcdn.com/images/dus_snp/post/3d1dde85-ef6a-4525-bff4-8347f006872c/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/6012ce63-8870-4666-bab5-57e7d7930b10/image.png" alt="">
식(2) =&gt; 연산 능력 가용 검사
식(3) =&gt; 메모리 가용 검사
*<em>현재 사용중인 {컴퓨팅 파워, 메모리} + 할당하려는 CU의 {컴퓨팅 파워, 메모리} &lt;= 엣지 노드의 총 {컴퓨팅 파워, 메모리} 용량 *</em>
<img src="https://velog.velcdn.com/images/dus_snp/post/b9c3336f-6783-4ca4-9ae2-2526c92f9985/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/259916df-f0e8-405a-b262-ddc81078e70b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/f94717f9-19b5-42c6-888f-56820f74ec2b/image.png" alt="">
<img src="https://velog.velcdn.com/images/dus_snp/post/8a003c4f-c43f-4df8-ab15-9fc83d337d73/image.png" alt="">
<img src="https://velog.velcdn.com/images/dus_snp/post/75013ec4-231e-42f6-a3ba-5a67f6301d03/image.png" alt=""></p>
<h2 id="algorithm">Algorithm</h2>
<h4 id="regrouping의-필요성">Regrouping의 필요성</h4>
<p>초기에는 태스크들이 도착 시간(Arrival Time) 기준으로 단순 저장되기 때문에, 서비스 유형과 자원 요구가 뒤섞여 스케줄링 효율이 저하
-&gt; 태스크를 서비스 유형(Service Type) 및 긴급도(Urgency) 기준으로 Regrouping</p>
<h4 id="algorithm-1">Algorithm 1</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/d9cc8dda-13a1-4abb-b26b-36204b41f2f6/image.png" alt=""></p>
<ol>
<li>태스크를 도착 시간에 따라 타이밍 그룹으로 분할</li>
<li>각 타이밍 그룹의 태스크를 서비스 타입별 컴퓨터 그룹(X_h)에 매핑</li>
<li>그 그룹의 기존 대기열의 각 태스크의 우선순위 및 평균 처리시간 계산</li>
<li>우선순위 값에 따라 새 대기열 생성</li>
<li>해당 서비스가 엣지에서 처리될 수 없으면 리모트 클라우드로 전송</li>
</ol>
<h4 id="algorithm-2">Algorithm 2</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/6824c1bb-24f9-4a81-b3d2-7f11022f9b51/image.png" alt="">
즉시 가용 리소스가 있는 경우 (line 1~9)</p>
<ul>
<li>가장 빠른 완료 시간을 가진 노드에 그리디 스케줄링 (line8~9)</li>
</ul>
<p>리소스가 가득 찬 경우 (line 10~27)</p>
<ul>
<li>각 슬롯 노드에 할당하여 EFT(Earliest Finish Time) 계산 (line 11~13)</li>
</ul>
<p>데드라인 미충족 시 (line 14~27)</p>
<ul>
<li>태스크 조정 호출 (line18~21)</li>
<li>실행가능한 솔루션이 없으면 리모트 클라우드로 스케줄링 (line22~25)</li>
</ul>
<h4 id="algorithm-3">Algorithm 3</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/c63fb4a6-616b-4d8b-9e00-c04aa82aaacb/image.png" alt="">
<strong>1. Direct Insertion(DI) (line 1~6)</strong>
새로운 태스크를 기존 실행 큐(PreScheme) 중간에 삽입하여 데드라인을 만족할 수 있는 위치를 찾음 
특징 : 파편화된 리소스 활용하여 자원 낭비 감소
효과 : 데드라인 만족률 증가
<strong>2. Highest Reward Insertion(HRI) (line 7~15)</strong>
단순히 데드라인만 보는게 아닌 LTSS가 더 커지는 방향으로 태스크를 선택/재배치
특징 : Slack time을 활용하여 기다리면 더 가치있는 태스크를 살림
효과 : 전체 시스템 효용 극대화
<strong>3. Maximum Reward Replacement(MRR) (line 16~20)</strong>
가장 적은 재배치로 데드라인을 만족시키는 대안 탐색
특징 : 큰 구조 변경 없이 효율성 확보
효과 : 안정적이고 현실적인 조정 가능</p>
<h4 id="algorithm-4">Algorithm 4</h4>
<p>Deadline 위반 태스크를 가장 빠른 EFT 노드로 재할당하여 CRD를 향상 시키는 것을 목표</p>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/f82f7206-812a-4bdc-8a3e-0045efb91b2a/image.png" alt=""></p>
<p>가용 노드 집합 (AvaNodes) 생성 및 EFT 평가 (line 1<del>6)
EFT 최소 노드 선정 (line 7</del>8)
Deadline이내면 노드 갱신 및 우선순위 계산 (line 9<del>13)
충족 불가 시 리모트 클라우드로 전송 (line 14</del>17)</p>
<h2 id="실험-환경">실험 환경</h2>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/bb609caf-aa54-465e-91f4-b3fc3b897733/image.png" alt=""></p>
<h4 id="워크로드">워크로드</h4>
<p>실제 애플리케이션
이미지 처리, ALU 논리 연산, 부동소수점 연산, 얼굴 매칭 등 
Python으로 작성된 여러 프로그램 사용</p>
<p>시뮬레이션 데이터셋
알리바바 클라우드 실제 트레이스 데이터 활용
밀도 데이터셋 : 8개 서브셋 (밀도 1~8), 각 약 10,000개 태스크
분포 데이터셋 : 3개 서브셋 (다양한 분포), 각 약 25,000개 태스크</p>
<p>각 태스크 디스패처는 서로 다른 종류의 애플리케이션을 실행
각 디스패처는 50<del>100ms 간격으로 0</del>1개의 태스크를 오프로딩</p>
<p>각 요청은 입력 메타데이터, 예상 마감시간 (Deadline), 
긴급 여부(Expedited Flag)에 대한 정보 포함</p>
<p>서비스 인스턴스는 모두 pre-warmed 상태로 설정</p>
<h4 id="평가지표">평가지표</h4>
<p>CRD(Completion Rate before Deadline)
LTSS(Long-Term Satisfaction of System Service)
ACT(Average Completion Time)
Resource Utilization + RU Efficiency</p>
<h2 id="비교-대상">비교 대상</h2>
<ul>
<li><strong>Dedas</strong> : 노드의 스케줄을 순차적으로 순회하여 작업에 적합한 삽입 위치 탐색삽입 불가 시, 총 완료 시간을 비용 요소로 고려하여 최적의 스케줄을 얻기 위해 작업을 교체</li>
<li><strong>RTH2S</strong> : 노드를 계층화하여 3단계 우선순위 큐와 EDF(Earliest Deadline First) 방식으로 스케줄링</li>
<li><strong>LSPT (LeastLoad + SRPT)</strong> : 부하가 가장 낮은 노드에 태스크를 보내고, 남은 처리시간이 짧은 순으로 실행</li>
<li><strong>LEDF (LeastLoad + EDF)</strong> : 부하 최소 + 가장 빠른 마감시간 순서로 태스크 할당</li>
<li><strong>SF (Self + FCFS)</strong> : 태스크가 스스로 가장 빠른 완료시간을 예측하여 FCFS로 실행<h2 id="실험-결과">실험 결과</h2>
<h3 id="테스트베드">테스트베드</h3>
<img src="https://velog.velcdn.com/images/dus_snp/post/084eaaf1-b31f-42a1-93d1-9b1bf063fc8f/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/c2a37eeb-afdc-4df3-b57e-cafa3f32b6f8/image.png" alt=""></p>
<h3 id="태스크-도착-밀도">태스크 도착 밀도</h3>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/496cdd09-2c94-4bc7-a0b9-7c7c326d31e7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/ed1cf67f-231b-487b-9e9f-9ddab061d9fc/image.png" alt=""></p>
<h3 id="태스크-분포">태스크 분포</h3>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/a2adc694-ffd2-4628-a7fa-60f62f018fd2/image.png" alt="">
태스크가어떤 분포로 도착하여도 RATGS가 CRD가 가장 높은 것을 확인 가능
태스크 도착 불확실성을 반영하기 위한 시뮬레이션</p>
<h3 id="컴퓨터-유닛-수에-따른-데드라인-미스율">컴퓨터 유닛 수에 따른 데드라인 미스율</h3>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/c85bc69d-1b47-492c-84c4-c2e0731657e8/image.png" alt="">
RATGS : 22 CU에서 99.9% 완료 (가장 빠름)
다른 전략 : 더 많은 CU 필요
LSPT/LEDF : CU증가해도 ~80% 완료
<strong>즉, RATGS는 자원이 부족한 상황일수록 성능 우위 확인 가능</strong></p>
<h3 id="컴퓨터-유닛-수에-따른-ltss">컴퓨터 유닛 수에 따른 LTSS</h3>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/5f681b80-ce48-490f-a358-823c9855edf6/image.png" alt="">
컴퓨팅 유닛 수가 30에 도달하면 각 스케줄링 전략의 성능이 가장 좋아지는 경향이 있지만, 
22 미만이면 RATGS의 성능이 LTSS 지표에서 모든 전략보다 우수</p>
<h3 id="컴퓨터-유닛-수에-따른-act">컴퓨터 유닛 수에 따른 ACT</h3>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/779bd558-34e0-404e-9fb5-94adbb0f8bcb/image.png" alt="">
컴퓨팅 유닛 수가 30을 초과하고 점진적으로 증가함에 따라 RATGS는 ACT에서 Dedas보다 약간 더 나은 성능을 보이기 시작
컴퓨팅 유닛 수가 증가함에 따라 최적의 스케줄링을 달성하기 위한 작업 조정 공간과 선택 사항이 더 넓어지기 때문</p>
<h3 id="리소스-활용">리소스 활용</h3>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/e22dd327-9af3-45ae-bd23-08ade880f177/image.png" alt="">
<strong>RU(Resource Utilization)</strong>
LSPT/LEDF: 평균 80% 이상 (최고) -&gt;로드밸런싱 계열
RATGS: 고밀도 시 높음, 저밀도 시 낮음 
<strong>RUE (RU Efficiency = CRD/RU)</strong>
RATGS: 대조적 상황에서 최고 RUE 
적은 리소스로 더 많은 태스크 완료 
<strong>핵심발견</strong>
엣지 환경과 같은 자원이 제한된 환경에선 RUE가 더 중요한 지표
단순 활용보다 활용 효율성이 중요
RATGS는 제한된 리소스를 가장 효율적으로 활용</p>
<h2 id="연구의-핵심-성과">연구의 핵심 성과</h2>
<ul>
<li>이질적 자원 환경을 현실적으로 모델링<ul>
<li>노드별 성능, 메모리, 대역폭 등을 구체적으로 고려</li>
</ul>
</li>
<li>다항시간 복잡도의 휴리스틱 솔루션 제시<ul>
<li>NP-hard 문제를 O(n²) 내에서 근사적으로 해결</li>
</ul>
</li>
<li>마감시간 제약과 자원 경쟁을 동시에 고려한 스케줄링 정식화<ul>
<li>LTSS와 CRD를 통합적으로 최적화</li>
</ul>
</li>
<li>단순한 RU보다 RUE의 성능지표로서의 가치<ul>
<li>자원이 한정된 환경에서 RUE가 성능지표로 더 적합한 것을 확인<h2 id="연구의-한계점-및-향후-연구">연구의 한계점 및 향후 연구</h2>
</li>
</ul>
</li>
<li>태스크 간 종속성 미고려</li>
<li>에너지 소비와 콜드 스타트로 인한 서비스 지연 무시</li>
</ul>
<h4 id="향후-연구">향후 연구</h4>
<ul>
<li>태스크 간 선후 관계를 반영한 스케줄링 모델</li>
<li>에너지 효율성 고려</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[랩미팅 논문 발표 요약2]]></title>
            <link>https://velog.io/@dus_snp/%EB%9E%A9%EB%AF%B8%ED%8C%85-%EB%85%BC%EB%AC%B8-%EB%B0%9C%ED%91%9C-%EC%9A%94%EC%95%BD2</link>
            <guid>https://velog.io/@dus_snp/%EB%9E%A9%EB%AF%B8%ED%8C%85-%EB%85%BC%EB%AC%B8-%EB%B0%9C%ED%91%9C-%EC%9A%94%EC%95%BD2</guid>
            <pubDate>Tue, 11 Nov 2025 10:17:52 GMT</pubDate>
            <description><![CDATA[<p>A Price-and-Time-Slot-Negotiation Mechanism for Cloud Service Reservations
IEEETRANSACTIONS ONSYSTEMS,MAN,ANDCYBERNETICS—PARTB:CYBERNETICS,VOL.42,NO.3,JUNE2012
 Seokho Son and Kwang Mong Sim, _ Senior Member, IEEE_ 
 <a href="https://ieeexplore.ieee.org/abstract/document/6108366">https://ieeexplore.ieee.org/abstract/document/6108366</a></p>
<h2 id="문제-제기-및-연구의-필요성">문제 제기 및 연구의 필요성</h2>
<h4 id="기존-모델의-한계와-ptn-지원의-부재">기존 모델의 한계와 PTN 지원의 부재</h4>
<p>상업 클라우드 서비스 제공 업체들의 대표적인 세 가지 가격 모델은 온디맨드, 예약, 스팟 인스턴스로 나눌 수 있음
이 중 온디맨드와 예약 인스턴스는 고정된 가격을 지불해야하며 유동성이 적음. 스팟 인스턴스는 비용 절약이 가능하지만 서비스 시작, 종료 시점 계획이 어렵고 최대 입찰 가격 초과 시 경고 없이 인스턴스가 종료되는 큰 단점이 존재함</p>
<p>이로 인해 중단 없이 선호하는 시간대 예약을 위한 협상 메커니즘이 필요한데, 아직까지 서비스 가격과 시간대 협상을 자동화하는 메커니즘이 없음
따라서 연구를 통해 Price and Time slot Negotiation(PTN) 메커니즘을 개발함</p>
<h2 id="연구-목표">연구 목표</h2>
<ol>
<li>시간대 선호도를 특성화하는 새로운 효용함수를 포함한 PTN 메커니즘 개발</li>
<li>소비자와 제공자의 협상 전략을 위한 절충 및 양보 알고리즘 설계</li>
<li>에이전트 기반 클라우드 테스트베드 구현</li>
<li>실험을 통한 PTN 메커니즘 평가</li>
<li>클라우드 리소스 가격 책정에 PTN 메커니즘 적용 사례 연구<h2 id="핵심-아이디어">핵심 아이디어</h2>
<h4 id="ptnprcie-time-slot-negotiation">PTN(Prcie-Time-Slot Negotiation)</h4>
가격과 시간대를 동시에 고려하는 통합 협상 시스템</li>
<li>효용 함수 설계
 a. 가격 효용 + 시간대 효용 = 총 효용
 b. 개별 선호도를 정량적으로 표현</li>
<li>스마트 협상 전략
 a. 절충 및 시간의존적 양보 알고리즘으로 효율성 증대
 b. 버스트 모드로 선택권 확대</li>
<li>협상 프로토콜
 a. Rubinstein&#39;s alternating offers protocol
<img src="https://velog.velcdn.com/images/dus_snp/post/e2536b64-7c31-4f40-a446-79c315b0a182/image.png" alt=""><h2 id="핵심-해결책">핵심 해결책</h2>
<h4 id="협상-방식">협상 방식</h4>
기존 방식
한 번에 하나의 제안만 가능
상대방이 거절하면 다음 라운드까지 대기<h4 id="vs">VS</h4>
버스트 모드
한 번에 총 효용이 같은 제안을 동시에 제시
기존 방식보다 빠른 합의에 도달<h4 id="효용함수">효용함수</h4>
기존방식
사용자의 다양한 시간대 선호도 반영 불가
시간대를 단순히 마감 기한 내에 있는지 여부만 확인<h4 id="vs-1">vs</h4>
새로운 시간대 효용 함수
비선형 함수로 복잡한 시간 선호도 표현 가능
소비자 : 선호하는 여러 시간대 구간을 자유롭게 설정 가능
공급자 : 수요 예측, 리소스 활용도, 시간 순서를 종합 고려</li>
</ol>
<h2 id="효용-함수">효용 함수</h2>
<h4 id="가격-효용함수">가격 효용함수</h4>
<p>소비자 가격 효용 함수
<img src="https://velog.velcdn.com/images/dus_snp/post/5893a924-09e5-404d-970b-9eb77a8b3c86/image.png" alt="">
공급자 가격 효용 함수
<img src="https://velog.velcdn.com/images/dus_snp/post/0b6e66f0-10d5-46c8-9eb7-cca68fcb45dc/image.png" alt=""></p>
<h4 id="시간대-효용-함수">시간대 효용 함수</h4>
<p>소비자 시간대 효용 함수
<img src="https://velog.velcdn.com/images/dus_snp/post/da1e1081-44c8-48f3-9054-204d78cc7173/image.png" alt=""></p>
<p>공급자 시간대 효용 함수
<img src="https://velog.velcdn.com/images/dus_snp/post/7878c49c-3c0d-4254-aedf-699ac0b0f30f/image.png" alt=""></p>
<h4 id="총-효용-함수">총 효용 함수</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/6e97aaf7-50b4-40f0-a1e4-cbd7648c294e/image.png" alt=""></p>
<h2 id="실험-환경">실험 환경</h2>
<h4 id="에이전트-기반-클라우드-테스트베드">에이전트 기반 클라우드 테스트베드</h4>
<p>Java 및 JADE(Java Agent Development) 프레임워크를 사용하여 설계하고 구현</p>
<p>모든 에이전트는 JADE Directory Facilitator를 통해 구현된 클라우드 시장 등록소에 등록
등록소에 등록된 소비자 에이전트는 제공자 에이전트를 인식하고 상호 통신 가능
사용자는 GUI를 통해 서비스 이름, 가격, 시간대, 협상 전략 등 서비스에 대한 선호도를 지정하고 에이전트를 생성 가능
<img src="https://velog.velcdn.com/images/dus_snp/post/74e3d63b-b084-40c4-9bff-88dfe11cbdaa/image.png" alt=""></p>
<h2 id="실험-결과">실험 결과</h2>
<p>(a) λC =3.0, λP =3.0, τC =50,andτP =50. (b)λC =3.0,λP =3.0,τC = 200,andτP = 200. (c) λC =1/3, λP =1/3, τC =50, andτP =50. (d)λC =1/3, λP =1/3, τC = 200, andτP = 200. (e)λC =3.0, λP =1/3, τC =50, and τP =200. (f) λC =1/3, λP =3.0, τC =50, andτP = 200. (g)λC =3.0, λP =1/3, τC = 200,andτP =50. (h)λC =1/3, λP =3.0, τC =200,andτP =50.</p>
<p>λ : 협상 전략, τ : 협상 기한
λ &lt; 1 -&gt; 관대함(빠르게 양보)
λ = 1 -&gt; 선형(일정하게 양보)
λ &gt; 1 -&gt; 보수적(느리게 양보)</p>
<h4 id="협상-속도">협상 속도</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/5158e63c-745f-411b-8b34-eed612f9949b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/aa7e01d8-5191-48cb-b127-cab31d3c3d42/image.png" alt="">
동일한 협상 전략, 기한을 가진 에이전트 쌍의 경우 -&gt; (a) - (d)
협상 에이전트가 더 빠른 양보 전략을 선택할 수록 협상 시간이 빠른 것을 확인</p>
<p>다른 협상 전략, 기한을 가진 에이전트 쌍의 경우 -&gt; (e) - (h)
서로 다른 전략과 마감 기한을 가졌을 때도 Burst 모드에서 협상 속도가 높아지는 것을 볼 수 있음
(f), (g)에서는 한 에이전트가 보수적 전략과 긴 마감기한을 선택하면 협상 속도가 느려지는 것을 볼 수 있음 그럼에도 B50이 H1보다 28.1% ~ 57.3% 빠른 것을 확인</p>
<h4 id="총-효용">총 효용</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/e4a9b1b0-55b8-4e0e-aa42-fab0f0294e7c/image.png" alt=""></p>
<p>협상 전략과 기한에 좌우되지 않음
협상 전략과 기한이 서로 같거나 다르거나 상관없이 일관되게 다른 기법들보다 총 효용이 높게 나오는 것을 볼 수 있음.
다만, CL이 0.9일 때는 사용 가능한 시간대가 적어지면서 평균 총 효용이 줄어드는 것을 확인할 수 있음</p>
<h4 id="burst-mode의-제안-개수">Burst Mode의 제안 개수</h4>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/631d8973-2b0d-4267-b4c8-5466e1047334/image.png" alt=""></p>
<h5 id="동시-제안의-수-증가와-결과-향상량">동시 제안의 수 증가와 결과 향상량</h5>
<p>버스트 모드를 사용할 때, 동시 제안의 수가 증가함에 따라 더 빠른 협상 속도와 더 높은 효용이 나타났지만, 향상량은  동시 제안의 수가 증가함에 따라 감소함.</p>
<p>B10에서 B50으로 넘어갈 때, 협상 속도와 총 효용은 각각 5.6%와 1.5% 증가하였지만,
B50에서 B100으로 넘어갈 때, 협상 속도와 총 효용이 각각 0.7%와 0.6% 증가하였음.</p>
<p>이는 버스트 모드가 너무 많은 제안을 동시에 한다고 성능이 크게 달라지지 않는다는 것을 시사함. 따라서 계산 복잡도와 성능 개선을 잘 확인하며 제안 개수를 설정해야 함.</p>
<h2 id="연구의-기여도">연구의 기여도</h2>
<h4 id="최초의-클라우드-서비스-예약을-위한-ptn-메커니즘-설계-및-구현">최초의 클라우드 서비스 예약을 위한 PTN 메커니즘 설계 및 구현</h4>
<h4 id="burst-mode-절충-양보-알고리즘-설계">Burst Mode 절충, 양보 알고리즘 설계</h4>
<ul>
<li>협상 속도와 총 효용 모두 향상</li>
<li>다중 이슈 협상에서 동시 다중 제안 가능<h4 id="새로운-시간대-효용-함수-개발">새로운 시간대 효용 함수 개발</h4>
</li>
<li>다양한 시간대에 대한 서로 다른 선호도 특성화</li>
<li>기존 연구에서는 고려되지 않던 새로운 개념<h2 id="연구의-한계점-및-향후-연구">연구의 한계점 및 향후 연구</h2>
</li>
<li><strong>협상 메커니즘에서 다룬 쟁점의 수가 제한적</strong></li>
<li><strong>계산 복잡도가 더 효율적인 알고리즘 필요</strong></li>
<li><strong>사용자 친화적 인터페이스 부족</strong></li>
<li><strong>동적인 환경 변화에 대한 미고려</strong><h4 id="향후연구">향후연구</h4>
</li>
<li>다른 협상 쟁점(QoS 등)을 고려하고 명시하는 것</li>
<li>버스트 모드의 동시 제안의 수를 적응적으로 제어하여 계산 복잡도를 줄이고 알고리즘 향상</li>
<li>높은 수준의 사용자 선호도를 시간대 효용 함수의 낮은 수준의 기술적 사양으로 변환하는 GUI</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[랩미팅 논문 발표 요약1]]></title>
            <link>https://velog.io/@dus_snp/%EB%9E%A9%EB%AF%B8%ED%8C%85-%EB%85%BC%EB%AC%B8-%EB%B0%9C%ED%91%9C-%EC%9A%94%EC%95%BD1</link>
            <guid>https://velog.io/@dus_snp/%EB%9E%A9%EB%AF%B8%ED%8C%85-%EB%85%BC%EB%AC%B8-%EB%B0%9C%ED%91%9C-%EC%9A%94%EC%95%BD1</guid>
            <pubDate>Tue, 11 Nov 2025 09:50:22 GMT</pubDate>
            <description><![CDATA[<p>분산 데이터센터 환경의 클라우드에서 SLA 위반을 경감시키기 위한 가변 기법
정보과학회논문지: 컴퓨팅의 실제 및 레터 제 18 권 제 11 호(2012.11)
손석호, 정기훈, 전성찬
<a href="https://www.dbpia.co.kr/Journal/articleDetail?nodeId=NODE02033323">https://www.dbpia.co.kr/Journal/articleDetail?nodeId=NODE02033323</a></p>
<h2 id="문제-제기-및-연구의-필요성">문제 제기 및 연구의 필요성</h2>
<h4 id="서비스-수준-협약을-위반할-가능성">서비스 수준 협약을 위반할 가능성</h4>
<p>기존 CSP는 고정된 SLA를 제시하지만, 시스템 자원이 부족해지면 SLA를 위반할 가능성이 높음
특히, 지역적으로 분산된 데이터 센터를 운영하는 클라우드 환경에서는 서비스 응답속도와 부하 분산 사이에 상관관계가 있는데, 고정된 SLA는 부하를 효율적으로 분산시키기 어렵게 만듦</p>
<p>이러한 문제를 해결하고자 분산 데이터센터 환경에서 SLA 위반을 줄이기 위한 가변 SLA기법을 제안하고 그 유효성을 평가하고자 이 논문이 작성됨</p>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/68bf7703-4a81-4c5d-b70d-ac561289e448/image.png" alt=""></p>
<h2 id="핵심-아이디어-및-해결책">핵심 아이디어 및 해결책</h2>
<h4 id="핵심-아이디어">핵심 아이디어</h4>
<p>클라우드 서비스 공급자와 사용자 간의 자동화된 SLA 협상 메커니즘을 도입하여, 사용자의 요구사항과 시스템 자원 상황에 맞춰 서비스 품질을 미리 조율하는 것
이를 통해 고정 SLA로 인해 발생하는 문제들을 해결</p>
<h4 id="해결책">해결책</h4>
<p>다중 쟁점 협상 : 서비스 응답 속도와 가격을 주요 협상 쟁점으로 설정
공급자와 사용자는 이 두 가지 쟁점에 대한 만족도를 유틸리티 함수로 정의하고, 협상 에이전트가 최적의 합의점을 찾도록 함</p>
<p>가변 SLA 구현 : 협상을 통해 서비스 응답 속도와 가격을 유동적으로 결정하여, 사용자는 낮은 가격으로 느린 서비스를 받거나, 공급자는 부하 분산에 유리한 데이터센터에 작업을 할당할 수 있음</p>
<h2 id="연구-결과-및-입증내용">연구 결과 및 입증내용</h2>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/c1e90197-cbe8-4f31-9420-ba3402698211/image.png" alt="">
<img src="https://velog.velcdn.com/images/dus_snp/post/8db31e53-34da-459f-8c7c-f0542586fb5e/image.png" alt=""></p>
<h4 id="결론-도출-과정">결론 도출 과정</h4>
<p>에이전트 기반의 클라우드 테스트베드를 구축하고, 가변 SLA 기법과 고정 SLA 기법의 성능을 비교하는 시뮬레이션을 수행함
1,000명, 5,000명, 10,000명의 사용자로 가정 후 테스트를 진행함</p>
<h4 id="sla위반-경감">SLA위반 경감</h4>
<p>가변 SLA를 적용했을 때, 고정 SLA를 사용했을 때 보다 위반 사용자의 수가 월등히 낮아진 것을 볼 수 있음</p>
<h4 id="수익-증대">수익 증대</h4>
<p>가변 SLA를 이용하면 클라우드 공급자에게 더 높은 수익을 제공하는 것을 그래프를 통해 확인할 수 있음</p>
<h2 id="논문의-타당성-및-한계점">논문의 타당성 및 한계점</h2>
<h4 id="타당성">타당성</h4>
<p>이 연구는 분산 데이터센터 환경의 문제점을 해결하기 위해 가변적인 SLA라는 새로운 접근법을 제시하고, 자동화된 협상 메커니즘을 적용하여 이를 구체적으로 구현함</p>
<p>실험을 통해 SLA 위반율 감소와 수익 증대라는 뚜렷한 결과를 확인할 수 있으므로, 논문의 주장은 매우 합당하다고 볼 수 있음</p>
<h4 id="한계점">한계점</h4>
<p>본 논문에서 언급된 직접적인 한계점이 없음 </p>
<p>그러나 저자가 향후 연구로 SLA 협상 기법에 기반한 자원 및 과금 정책 스케줄러 디자인을 고안할 계획이라고 밝히며, 
이는 SLA 협상 외에 실제 클라우드 시스템의 자원 관리 및 요금 청구 방식과 연계하는 포괄적인 연구가 필요하다고 볼 수 있음</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 구조 Chapter 06]]></title>
            <link>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-06</link>
            <guid>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-06</guid>
            <pubDate>Mon, 01 Sep 2025 11:32:10 GMT</pubDate>
            <description><![CDATA[<h2 id="컴퓨터-저장-장치-ram과-보조기억장치-ft-캐시-메모리">컴퓨터 저장 장치: RAM과 보조기억장치 (ft. 캐시 메모리)</h2>
<hr>
<h3 id="1-ram과-보조기억장치의-차이">1. RAM과 보조기억장치의 차이</h3>
<p>컴퓨터의 저장 장치는 데이터가 전원이 꺼진 후에도 유지되는지 여부에 따라 <strong>휘발성</strong>과 <strong>비휘발성</strong>으로 나뉩니다.</p>
<ul>
<li><p><strong>RAM (Random Access Memory)</strong>:</p>
<ul>
<li><strong>휘발성</strong> 장치로, 전원이 꺼지면 모든 내용이 사라집니다.</li>
<li>CPU가 직접 접근하는 <strong>주기억장치</strong>이며, 현재 실행 중인 프로그램이나 데이터를 임시로 저장하는 &#39;작업 공간&#39; 역할을 합니다.</li>
<li>RAM의 용량이 클수록 더 많은 프로그램을 동시에 처리할 수 있어 작업 속도가 빨라집니다.</li>
</ul>
</li>
<li><p><strong>보조기억장치</strong>:</p>
<ul>
<li><strong>비휘발성</strong> 장치로, 전원이 꺼져도 데이터가 보존됩니다.</li>
<li><strong>하드 디스크(HDD), SSD, CD-ROM, USB 메모리</strong> 등이 대표적입니다.</li>
<li>프로그램과 데이터를 영구적으로 저장하는 역할을 합니다. CPU는 여기에 직접 접근하지 못하고, 실행에 필요한 데이터를 RAM으로 복사하여 사용합니다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="2-dram-vs-sram-ram의-두-얼굴">2. DRAM vs. SRAM: RAM의 두 얼굴</h3>
<p>RAM은 크게 DRAM과 SRAM 두 종류로 나뉘며, 각각의 특성과 사용 목적이 다릅니다.</p>
<ul>
<li><p><strong>DRAM (Dynamic RAM)</strong>:</p>
<ul>
<li>저장된 데이터가 시간이 지나면 동적으로 사라지기 때문에, 주기적으로 데이터를 재활성화(재충전)해야 합니다.</li>
<li><strong>저렴하고 집적도가 높아</strong> 대용량 메모리인 <strong>주기억장치(RAM)</strong>로 널리 쓰입니다.</li>
</ul>
</li>
<li><p><strong>SRAM (Static RAM)</strong>:</p>
<ul>
<li>전원이 공급되는 동안 데이터가 유지되어 재충전이 필요 없습니다.</li>
<li><strong>DRAM보다 속도가 빠르지만, 가격이 비싸고 소비 전력이 많으며 집적도가 낮습니다.</strong></li>
<li>대용량보다는 빠른 속도가 중요한 <strong>캐시 메모리</strong>에 주로 사용됩니다.</li>
</ul>
</li>
</ul>
<table>
<thead>
<tr>
<th align="left">구분</th>
<th align="left"><strong>DRAM</strong></th>
<th align="left"><strong>SRAM</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>재충전</strong></td>
<td align="left">필요함</td>
<td align="left">필요 없음</td>
</tr>
<tr>
<td align="left"><strong>속도</strong></td>
<td align="left">느림</td>
<td align="left">빠름</td>
</tr>
<tr>
<td align="left"><strong>가격</strong></td>
<td align="left">저렴함</td>
<td align="left">비쌈</td>
</tr>
<tr>
<td align="left"><strong>집적도</strong></td>
<td align="left">높음</td>
<td align="left">낮음</td>
</tr>
<tr>
<td align="left"><strong>소비 전력</strong></td>
<td align="left">적음</td>
<td align="left">높음</td>
</tr>
<tr>
<td align="left"><strong>주요 용도</strong></td>
<td align="left">주기억장치(RAM)</td>
<td align="left">캐시 메모리</td>
</tr>
</tbody></table>
<hr>
<h3 id="3-발전된-ram-sdram과-ddr-sdram">3. 발전된 RAM: SDRAM과 DDR SDRAM</h3>
<ul>
<li><p><strong>SDRAM (Synchronous Dynamic RAM)</strong>:</p>
<ul>
<li>CPU의 <strong>클럭 신호와 동기화</strong>되어 작동하는 발전된 형태의 DRAM입니다.</li>
<li>클럭 타이밍에 맞춰 CPU와 데이터를 주고받아 비동기식 DRAM보다 훨씬 효율적입니다.</li>
</ul>
</li>
<li><p><strong>DDR SDRAM (Double Data Rate SDRAM)</strong>:</p>
<ul>
<li>SDRAM의 발전형으로, <strong>대역폭</strong>을 2배로 넓혀 한 클럭당 두 번씩 데이터를 주고받을 수 있게 되었습니다.</li>
<li><code>DDR2</code>, <code>DDR3</code>, <code>DDR4</code> 등으로 발전하며 전송 속도가 계속 향상됩니다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="4-메모리-관리-기술-논리-주소와-물리-주소">4. 메모리 관리 기술: 논리 주소와 물리 주소</h3>
<p>CPU는 프로그램을 실행할 때 실제 메모리 주소를 직접 다루기 어렵기 때문에 가상의 주소를 사용합니다.</p>
<ul>
<li><strong>물리 주소</strong>: 메모리 하드웨어가 실제로 사용하는 주소.</li>
<li><strong>논리 주소</strong>: CPU와 실행 중인 프로그램이 사용하는 가상의 주소.</li>
</ul>
<p>이를 변환하는 장치가 바로 <strong>메모리 관리 장치(MMU)</strong>입니다. MMU는 논리 주소에 <strong>베이스 레지스터</strong> 값을 더해 실제 물리 주소를 계산합니다.</p>
<h4 id="메모리-보호-기법">메모리 보호 기법</h4>
<ul>
<li><strong>베이스 레지스터</strong>: 현재 프로그램의 시작 물리 주소를 저장합니다.</li>
<li><strong>한계 레지스터</strong>: 현재 프로그램의 논리 주소 최대 크기를 저장합니다.</li>
<li><strong>작동 방식</strong>: CPU가 메모리에 접근할 때, 접근하려는 논리 주소가 한계 레지스터 값을 넘지 않는지 검사하여 다른 프로그램의 영역을 침범하지 않도록 보호합니다.</li>
</ul>
<hr>
<h3 id="5-저장-장치-계층-구조와-캐시-메모리">5. 저장 장치 계층 구조와 캐시 메모리</h3>
<p>컴퓨터의 저장 장치는 속도와 용량에 따라 계층적으로 구성됩니다.</p>
<ul>
<li><strong>원칙</strong>: CPU에 가까운 장치일수록 빠르고, 멀어질수록 느립니다. 또한, 속도가 빠를수록 용량은 작고 가격은 비쌉니다.</li>
</ul>
<h4 id="캐시-메모리">캐시 메모리</h4>
<p>CPU와 RAM의 속도 차이를 줄이기 위해 탄생한 <strong>매우 빠른 임시 저장 장치</strong>입니다. CPU가 필요할 것으로 예측되는 데이터를 미리 가져와 저장해 둡니다.
메모리로부터 데이터를 가져올 때는 참조 지역성의 원리를 따릅니다.</p>
<ul>
<li><strong>캐시 히트</strong>: 예측이 맞아 캐시에서 데이터를 찾았을 때.</li>
<li><strong>캐시 미스</strong>: 예측이 틀려 RAM에서 데이터를 가져와야 할 때.</li>
<li><strong>종류</strong>: CPU 코어에 가까운 순서대로 <strong>L1, L2, L3 캐시</strong>가 있습니다. L1이 가장 빠르고 용량이 작습니다.</li>
<li><strong>참조 지역성의 원리</strong>: 캐시 메모리가 데이터를 가져오는 핵심 원칙입니다.<ol>
<li><strong>시간 지역성</strong>: 최근에 사용된 데이터는 곧 다시 사용될 가능성이 높다.</li>
<li><strong>공간 지역성</strong>: 사용된 데이터 근처의 데이터가 곧 사용될 가능성이 높다.</li>
</ol>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 구조 Chapter 05]]></title>
            <link>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-05</link>
            <guid>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-05</guid>
            <pubDate>Sun, 17 Aug 2025 08:27:39 GMT</pubDate>
            <description><![CDATA[<h2 id="cpu의-핵심-작동-원리-클럭-멀티코어-멀티스레드">CPU의 핵심 작동 원리: 클럭, 멀티코어, 멀티스레드</h2>
<hr>
<h3 id="1-클럭-clock">1. 클럭 (Clock)</h3>
<p><strong>클럭</strong>은 컴퓨터 부품들이 일사불란하게 움직일 수 있도록 해주는 시간 단위입니다. 마치 지휘자의 박수처럼, CPU는 이 클럭 신호에 맞춰 명령어를 처리합니다.</p>
<ul>
<li><strong>클럭 속도 (Clock Speed)</strong>: 1초에 발생하는 클럭의 횟수로, <strong>헤르츠(Hz)</strong> 단위로 나타냅니다. 일반적으로 클럭 속도가 빠를수록 CPU의 성능이 높아집니다.</li>
<li><strong>클럭 속도의 한계</strong>: 클럭 속도를 무작정 높이면 <strong>발열</strong>이 심해져 CPU 성능에 오히려 악영향을 줄 수 있습니다. 이 때문에 클럭 속도를 높이는 데에는 한계가 있습니다.</li>
</ul>
<hr>
<h3 id="2-멀티코어-multi-core">2. 멀티코어 (Multi-core)</h3>
<p>클럭 속도의 한계를 극복하기 위해 등장한 방식 중 하나가 <strong>코어</strong> 수를 늘리는 것입니다.</p>
<ul>
<li><strong>코어 (Core)</strong>: 실제로 명령어를 실행하는 CPU의 핵심 부품입니다.</li>
<li><strong>멀티코어 CPU</strong>: 여러 개의 코어를 한 칩에 집적한 CPU를 말합니다. 여러 개의 일꾼이 동시에 작업하는 것처럼, 여러 코어가 동시에 명령어를 처리하여 전체 성능을 향상시킵니다.<ul>
<li><strong>예시</strong>: 2.4GHz 클럭의 단일 코어 CPU보다 1.9GHz 클럭의 멀티코어 CPU가 일반적으로 더 높은 성능을 보입니다.</li>
</ul>
</li>
<li><strong>주의사항</strong>: 코어 수가 많다고 해서 무조건 성능이 비례하여 증가하는 것은 아닙니다. 작업을 효율적으로 분배하는 기술이 중요하며, 작업량에 비해 코어 수가 지나치게 많으면 효율이 떨어질 수 있습니다.</li>
</ul>
<hr>
<h3 id="3-스레드-thread">3. 스레드 (Thread)</h3>
<p>스레드는 CPU에서 명령어를 처리하는 단위로, <strong>하드웨어 스레드</strong>와 <strong>소프트웨어 스레드</strong>로 구분해 이해하는 것이 좋습니다.</p>
<h4 id="하드웨어-스레드">하드웨어 스레드</h4>
<ul>
<li><strong>정의</strong>: 하나의 코어가 동시에 처리하는 명령어의 단위를 의미합니다.</li>
<li><strong>멀티스레드 프로세서</strong>: 하나의 코어가 2개 이상의 명령어를 동시에 처리할 수 있는 기술입니다. 인텔의 <strong>하이퍼스레딩(Hyper-Threading)</strong> 기술이 대표적입니다.<ul>
<li><strong>원리</strong>: 코어 내에 여러 개의 <strong>레지스터</strong>를 두어 마치 여러 개의 코어가 있는 것처럼 동작하게 합니다. 그래서 하드웨어 스레드를 <strong>논리 프로세서</strong>라고 부르기도 합니다.</li>
</ul>
</li>
</ul>
<h4 id="소프트웨어-스레드">소프트웨어 스레드</h4>
<ul>
<li><strong>정의</strong>: 하나의 프로그램에서 독립적으로 실행되는 작업의 단위입니다.<ul>
<li><strong>예시</strong>: 워드 프로그램에서 &#39;입력 내용 보여주기&#39;, &#39;맞춤법 검사&#39;, &#39;자동 저장&#39; 등의 기능을 각각의 스레드로 만들어 동시에 실행할 수 있습니다.</li>
</ul>
</li>
</ul>
<p><strong>정리</strong>:</p>
<ul>
<li><strong>코어</strong>: 물리적으로 명령어를 실행하는 하드웨어 부품. (일꾼)</li>
<li><strong>스레드</strong>: 명령어를 실행하는 논리적인 단위. (일꾼 한 명이 동시에 여러 개의 일을 할 수 있는 능력)</li>
<li><strong>멀티코어</strong>: CPU에 물리적인 코어가 여러 개 있는 것.</li>
<li><strong>멀티스레드</strong>: 하나의 코어가 여러 스레드를 동시에 처리할 수 있는 것.</li>
</ul>
<hr>
<h2 id="cpu-성능-향상을-위한-명령어-병렬-처리-기법">CPU 성능 향상을 위한 명령어 병렬 처리 기법</h2>
<p>CPU의 성능을 높이기 위해서는 클럭, 코어, 스레드 외에도 CPU가 쉬지 않고 일하게 만드는 <strong>명령어 병렬 처리</strong> 기술이 중요합니다.</p>
<h3 id="1-명령어-파이프라이닝-instruction-pipelining">1. 명령어 파이프라이닝 (Instruction Pipelining)</h3>
<p>명령어 처리 과정을 여러 단계(인출, 해석, 실행, 결과 저장 등)로 나누고, 각 단계를 겹쳐서 동시에 처리하는 기법입니다.
마치 공장의 생산 라인처럼 여러 명령어를 연속적으로 처리하여 효율을 극대화합니다.</p>
<ul>
<li><strong>위험 요소</strong>:<ul>
<li><strong>데이터 위험</strong>: 명령어 간 데이터 의존성 때문에 발생하는 문제. (예: 앞선 명령어의 결과가 다음 명령어에 필요할 때)</li>
<li><strong>제어 위험</strong>: 프로그램 분기(조건에 따라 실행 순서가 바뀌는 것)로 인해 미리 가져온 명령어들이 쓸모없게 되는 문제. <strong>분기 예측</strong> 기술로 해결합니다.</li>
<li><strong>구조적 위험</strong>: 여러 명령어가 동시에 같은 CPU 부품(ALU, 레지스터 등)을 사용하려고 할 때 발생하는 문제.</li>
</ul>
</li>
</ul>
<h3 id="2-슈퍼스칼라-superscalar">2. 슈퍼스칼라 (Superscalar)</h3>
<p>대부분의 현대 CPU가 채택하고 있는 구조로, <strong>여러 개의 파이프라인</strong>을 동시에 사용하는 기법입니다. 여러 명령어를 한꺼번에 처리할 수 있어 처리 속도가 이론적으로 파이프라인 개수에 비례하여 빨라집니다.</p>
<h3 id="3-비순차적-명령어-처리-out-of-order-execution-oooe">3. 비순차적 명령어 처리 (Out-of-order Execution, OoOE)</h3>
<p>데이터 의존성이 없는 명령어들을 순서와 관계없이 먼저 실행하여, 파이프라인이 멈추는 것을 방지하고 전체적인 성능을 높이는 기법입니다.</p>
<hr>
<h2 id="명령어-집합-아키텍처-instruction-set-architecture-isa">명령어 집합 아키텍처 (Instruction Set Architecture, ISA)</h2>
<p><strong>ISA</strong>는 CPU가 이해할 수 있는 명령어들의 모음으로, CPU의 언어와 같습니다. 대표적으로 <strong>CISC</strong>와 <strong>RISC</strong>가 있습니다.</p>
<h3 id="cisc-complex-instruction-set-computer">CISC (Complex Instruction Set Computer)</h3>
<ul>
<li><strong>특징</strong>: 복잡하고 다양한 기능의 명령어 집합을 사용합니다.</li>
<li><strong>장점</strong>: 하나의 명령어로 복잡한 연산을 수행할 수 있어 프로그램을 이루는 명령어 수가 적습니다.</li>
<li><strong>단점</strong>: 명령어의 길이가 가변적이고 실행 시간이 일정하지 않아 <strong>파이프라이닝에 불리</strong>합니다.</li>
</ul>
<h3 id="risc-reduced-instruction-set-computer">RISC (Reduced Instruction Set Computer)</h3>
<ul>
<li><strong>특징</strong>: 단순하고 적은 종류의 명령어를 사용합니다.</li>
<li><strong>장점</strong>: 고정된 명령어 길이와 1클럭 내외의 실행 시간으로 <strong>파이프라이닝에 최적화</strong>되어 있습니다.</li>
<li><strong>단점</strong>: CISC보다 많은 명령어를 사용해야 프로그램을 완성할 수 있습니다.</li>
</ul>
<table>
<thead>
<tr>
<th align="left">구분</th>
<th align="left">CISC</th>
<th align="left">RISC</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>명령어</strong></td>
<td align="left">복잡하고 다양함</td>
<td align="left">단순하고 적음</td>
</tr>
<tr>
<td align="left"><strong>명령어 길이</strong></td>
<td align="left">가변적</td>
<td align="left">고정적</td>
</tr>
<tr>
<td align="left"><strong>파이프라이닝</strong></td>
<td align="left">어려움</td>
<td align="left">쉬움</td>
</tr>
<tr>
<td align="left"><strong>프로그램 명령어 수</strong></td>
<td align="left">적음</td>
<td align="left">많음</td>
</tr>
<tr>
<td align="left"><strong>주소 지정 방식</strong></td>
<td align="left">다양함</td>
<td align="left">적음</td>
</tr>
<tr>
<td align="left"><strong>수행 시간</strong></td>
<td align="left">여러 클럭</td>
<td align="left">1클럭 내외</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 구조 Chapter 04]]></title>
            <link>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-04</link>
            <guid>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-04</guid>
            <pubDate>Thu, 17 Jul 2025 08:21:24 GMT</pubDate>
            <description><![CDATA[<h1 id="cpu와-작동-원리">CPU와 작동 원리</h1>
<h2 id="alu-산술-논리-연산-장치">ALU (산술 논리 연산 장치)</h2>
<h3 id="받아들이는-정보">받아들이는 정보</h3>
<ul>
<li><strong>피연산자와 제어 신호</strong><ul>
<li>레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들임</li>
<li>받아들인 피연산자와 제어 신호로 산술 연산, 논리 연산 등 다양한 연산을 수행</li>
</ul>
</li>
</ul>
<h3 id="내보내는-정보">내보내는 정보</h3>
<ul>
<li><strong>결과값과 플래그</strong><ul>
<li>결과값은 일시적으로 레지스터에 저장된 후 메모리에 저장 (프로그램의 실행 속도를 위해서)</li>
<li>플래그는 연산 결과에 대한 추가적인 상태 정보를 뜻하며, 플래그 레지스터에 저장됨</li>
</ul>
</li>
</ul>
<h4 id="플래그-종류-및-의미">플래그 종류 및 의미</h4>
<table>
<thead>
<tr>
<th>플래그 종류</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td>부호 플래그</td>
<td>연산한 결과의 부호를 나타냄</td>
</tr>
<tr>
<td>제로 플래그</td>
<td>연산 결과가 0인지 여부를 나타냄</td>
</tr>
<tr>
<td>캐리 플래그</td>
<td>연산 결과 올림수나 빌림수가 발생했는지를 나타냄</td>
</tr>
<tr>
<td>오버플로우 플래그</td>
<td>오버플로우가 발생했는지를 나타냄</td>
</tr>
<tr>
<td>인터럽트 플래그</td>
<td>인터럽트가 가능한지를 나타냄</td>
</tr>
<tr>
<td>슈퍼바이저 플래그</td>
<td>실행 중인 모드가 커널 모드인지 사용자 모드인지 나타냄</td>
</tr>
</tbody></table>
<hr>
<h2 id="제어장치-control-unit">제어장치 (Control Unit)</h2>
<h3 id="받아들이는-정보-1">받아들이는 정보</h3>
<ul>
<li><strong>클럭 신호</strong><ul>
<li>컴퓨터의 모든 부품을 일사분란하게 움직일 수 있게 하는 시간 단위  </li>
<li>(모든 부품이 클럭 박자에 맞춰서 작동하지만, 한 박자마다 작동하는 건 아님)</li>
</ul>
</li>
<li><strong>명령어</strong><ul>
<li>명령어 레지스터로부터 해석할 명령어를 받아들이고, 해석한 뒤 제어신호를 발생시켜 수행할 내용을 알려줌</li>
</ul>
</li>
<li><strong>플래그</strong><ul>
<li>플래그 값을 참고하여 제어신호를 발생시켜 올바른 정보 전달 및 동작 수행 유도</li>
</ul>
</li>
<li><strong>제어 신호</strong><ul>
<li>제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들이기도 함</li>
</ul>
</li>
</ul>
<h3 id="내보내는-정보-1">내보내는 정보</h3>
<ul>
<li><strong>외부에 전달하는 제어 신호:</strong><br>메모리와 입출력장치에 전달하는 신호</li>
<li><strong>내부에 전달하는 제어 신호:</strong><br>ALU와 레지스터에 전달하는 신호</li>
</ul>
<hr>
<h2 id="레지스터-register">레지스터 (Register)</h2>
<ul>
<li>프로그램의 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨  </li>
<li>레지스터 속 값을 관찰하면 CPU 내에서 무슨 일이 벌어지고 있는지, 어떤 명령어가 어떻게 수행되는지 알 수 있음</li>
</ul>
<h3 id="주요-레지스터-종류">주요 레지스터 종류</h3>
<table>
<thead>
<tr>
<th>레지스터 명</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>프로그램 카운터</td>
<td>메모리에서 읽어들일 명령어의 주소를 저장 (명령어 포인터)</td>
</tr>
<tr>
<td>명령어 레지스터</td>
<td>방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터</td>
</tr>
<tr>
<td>메모리 주소 레지스터</td>
<td>메모리 주소를 저장하는 레지스터</td>
</tr>
<tr>
<td>메모리 버퍼 레지스터</td>
<td>메모리와 주고받을 값을 저장하는 레지스터</td>
</tr>
<tr>
<td>범용 레지스터</td>
<td>데이터와 주소를 모두 저장할 수 있는 범용 레지스터</td>
</tr>
<tr>
<td>플래그 레지스터</td>
<td>ALU 연산 결과에 따른 플래그를 저장</td>
</tr>
<tr>
<td>스택 포인터</td>
<td>스택의 꼭대기를 가리키는 레지스터</td>
</tr>
<tr>
<td>베이스 레지스터</td>
<td>유효 주소를 얻기 위한 베이스 값을 가지고 있는 레지스터</td>
</tr>
</tbody></table>
<hr>
<h2 id="명령어-사이클-instruction-cycle">명령어 사이클 (Instruction Cycle)</h2>
<ul>
<li>명령어들은 일정한 주기가 반복되며 실행됨 (이 주기를 <strong>명령어 사이클</strong>이라고 함)<ul>
<li><strong>인출 사이클:</strong> 메모리에 있는 명령어를 CPU로 가지고 오는 단계</li>
<li><strong>실행 사이클:</strong> 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계</li>
<li><strong>간접 사이클:</strong> 실행을 위해 다시 메모리에 접근하는 단계</li>
</ul>
</li>
</ul>
<hr>
<h2 id="인터럽트-interrupt">인터럽트 (Interrupt)</h2>
<h3 id="종류">종류</h3>
<ul>
<li><strong>동기 인터럽트:</strong><br>CPU가 명령어를 수행하다가 오류 등 예외 상황에서 발생
(예외라고도 함)</li>
<li><strong>비동기 인터럽트:</strong><br>입출력장치에 의해 발생.<br>CPU가 지시한 작업을 완료하거나 입력을 받아들였을 때 CPU에 보내는 알림 (하드웨어 인터럽트라고도 함)</li>
</ul>
<h3 id="하드웨어-인터럽트-처리-순서">하드웨어 인터럽트 처리 순서</h3>
<ol>
<li>입출력장치가 CPU에 인터럽트 요청 신호를 보냄</li>
<li>CPU는 실행 사이클이 끝나고 명령어를 인출하기 전, 항상 인터럽트 여부를 확인함</li>
<li>인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인</li>
<li>인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업</li>
<li>CPU는 인터럽트 벡터를 참조하여 <strong>인터럽트 서비스 루틴(ISR)</strong>을 실행</li>
<li>ISR 실행이 끝나면 백업해둔 작업을 복구하여 실행 재개</li>
</ol>
<ul>
<li>CPU가 인터럽트 요청을 수행하려면 플래그 레지스터의 <strong>인터럽트 플래그</strong>가 활성화되어 있어야 함  </li>
<li>정전이나 고장 등 치명적인 인터럽트는 무시할 수 없음</li>
</ul>
<h4 id="용어-정리">용어 정리</h4>
<ul>
<li><strong>인터럽트 서비스 루틴(ISR)</strong>: 인터럽트를 처리하는 프로그램 (인터럽트 핸들러)</li>
<li><strong>인터럽트 벡터</strong>: ISR의 시작 주소 등 인터럽트 처리용 정보</li>
</ul>
<h3 id="예외의-종류">예외의 종류</h3>
<ul>
<li><strong>폴트 (fault):</strong><br>예외를 처리한 직후, 예외가 발생한 명령어부터 실행 재개</li>
<li><strong>트랩 (trap):</strong><br>예외를 처리한 직후, 다음 명령어부터 실행 재개</li>
<li><strong>중단 (abort):</strong><br>심각한 오류로 프로그램 강제 중단</li>
<li><strong>소프트웨어 인터럽트:</strong><br>시스템 호출이 발생했을 때 나타남</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터 구조 Chapter 03]]></title>
            <link>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-03</link>
            <guid>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-03</guid>
            <pubDate>Sat, 05 Jul 2025 13:38:25 GMT</pubDate>
            <description><![CDATA[<h1 id="명령어">명령어</h1>
<h3 id="언어-번역-방식-주소-지정-방식-정리">언어 번역 방식, 주소 지정 방식 정리</h3>
<h2 id="고급-언어와-저급-언어">고급 언어와 저급 언어</h2>
<p>우리가 작성하는 <strong>소스코드</strong>는 컴퓨터가 직접 이해하지 못함.  </p>
<ul>
<li>우리는 <strong>고급 언어</strong>(C, C++, Java, Python 등)를 사용하고,</li>
<li>컴퓨터는 <strong>저급 언어</strong>(기계어, 어셈블리어)만 이해하기 때문</li>
</ul>
<h3 id="기계어와-어셈블리어">기계어와 어셈블리어</h3>
<ul>
<li><p><strong>기계어</strong>:  
2진수 혹은 16진수로 구성된 <strong>컴퓨터가 직접 이해하는 명령어</strong><br>→ 사람이 해독하기 어려움</p>
</li>
<li><p><strong>어셈블리어</strong>:  
기계어를 사람이 <strong>조금 더 이해하기 쉬운 형태</strong>로 표현한 저급 언어<br>→ 어셈블리어를 알면 프로그램이 어떻게 동작하는지를 <strong>근본적인 수준에서 이해</strong>할 수 있음</p>
</li>
</ul>
<hr>
<h2 id="소스-코드-번역-방식">소스 코드 번역 방식</h2>
<p>소스코드를 컴퓨터가 이해할 수 있도록 저급 언어로 변환하는 방식은 두 가지가 있다.</p>
<h3 id="1-컴파일-방식">1. 컴파일 방식</h3>
<ul>
<li>전체 소스 코드를 <strong>한 번에 번역</strong>해서 실행</li>
<li>번역된 결과: <strong>목적 코드(object code)</strong></li>
<li>예: <strong>C 언어</strong></li>
</ul>
<p>✅ 장점:</p>
<ul>
<li>전체를 컴파일해두므로 실행 속도가 빠름</li>
</ul>
<p>❌ 단점:</p>
<ul>
<li>컴파일 과정에서 <strong>오류가 하나라도 있으면 실행 불가</strong></li>
</ul>
<hr>
<h3 id="2-인터프리터-방식">2. 인터프리터 방식</h3>
<ul>
<li>소스 코드를 <strong>한 줄씩 번역하면서 실행</strong></li>
<li>예: <strong>Python</strong></li>
</ul>
<p>✅ 장점:</p>
<ul>
<li>오류가 있는 줄을 실행하기 전까지는 나머지 코드가 실행됨 </li>
</ul>
<p>❌ 단점:</p>
<ul>
<li>매번 해석하며 실행하기 때문에 <strong>속도는 느림</strong></li>
</ul>
<hr>
<blockquote>
<p>⚠️ 고급 언어는 컴파일 언어 vs 인터프리터 언어처럼 <strong>명확히 나뉘지 않음.</strong><br>많은 언어가 두 속성을 <strong>모두 갖거나 전환 가능</strong>하기 때문</p>
</blockquote>
<hr>
<h2 id="명령어-구조">명령어 구조</h2>
<p>컴퓨터 명령어는 다음 두 부분으로 구성됨.</p>
<ul>
<li><strong>연산 코드 (Opcode)</strong>: 어떤 연산을 할지 정의</li>
<li><strong>오퍼랜드 (Operand)</strong>: 연산에 사용할 데이터</li>
</ul>
<blockquote>
<p>오퍼랜드는 연산의 대상이며, <strong>데이터</strong>, <strong>메모리 주소</strong>, <strong>레지스터</strong> 등이 올 수 있음.<br>그래서 오퍼랜드 필드를 <strong>주소 필드</strong>라고도 부름.</p>
</blockquote>
<hr>
<h2 id="주소-지정-방식-addressing-modes">주소 지정 방식 (Addressing Modes)</h2>
<p>오퍼랜드 필드에 연산 대상의 <strong>주소나 값을 명시하는 방식</strong>.  
대표적으로 <strong>다섯 가지 방식</strong></p>
<h3 id="1-즉시-주소-지정-방식-immediate-addressing">1. 즉시 주소 지정 방식 (Immediate Addressing)</h3>
<ul>
<li>데이터를 <strong>오퍼랜드 필드에 직접 명시</strong></li>
<li>가장 단순하고 빠르지만, 표현 가능한 데이터 크기에 <strong>제한</strong>이 있음</li>
</ul>
<h3 id="2-직접-주소-지정-방식-direct-addressing">2. 직접 주소 지정 방식 (Direct Addressing)</h3>
<ul>
<li><strong>유효 주소를 직접 명시</strong></li>
<li>표현 가능한 주소의 범위가 <strong>연산 코드 길이에 제한</strong>받음</li>
</ul>
<h3 id="3-간접-주소-지정-방식-indirect-addressing">3. 간접 주소 지정 방식 (Indirect Addressing)</h3>
<ul>
<li><strong>유효 주소의 주소</strong>를 오퍼랜드 필드에 명시</li>
<li>표현 범위는 넓지만, <strong>메모리 접근이 2회</strong> 필요하여 느림</li>
</ul>
<h3 id="4-레지스터-주소-지정-방식-register-addressing">4. 레지스터 주소 지정 방식 (Register Addressing)</h3>
<ul>
<li>데이터를 저장한 <strong>레지스터를 오퍼랜드 필드에 명시</strong></li>
<li>메모리보다 빠름  </li>
<li>그러나 <strong>사용 가능한 레지스터 수에 제한</strong></li>
</ul>
<h3 id="5-레지스터-간접-주소-지정-방식-register-indirect-addressing">5. 레지스터 간접 주소 지정 방식 (Register Indirect Addressing)</h3>
<ul>
<li>데이터를 메모리에 저장하고,<br>그 주소를 저장한 <strong>레지스터를 오퍼랜드 필드에 명시</strong></li>
<li>간접 주소 지정과 유사하지만, <strong>메모리 접근은 1번만 필요</strong></li>
</ul>
<hr>
<h2 id="연산-코드의-유형">연산 코드의 유형</h2>
<p>명령어의 연산 코드는 다음과 같은 유형으로 나뉨.</p>
<ol>
<li><strong>데이터 전송 (Data Transfer)</strong>  </li>
<li><strong>산술/논리 연산 (Arithmetic/Logical Operations)</strong>  </li>
<li><strong>제어 흐름 변경 (Control Flow)</strong>  </li>
<li><strong>입출력 제어 (I/O Control)</strong></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[💻 컴퓨터 구조 Chapter 02]]></title>
            <link>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-02</link>
            <guid>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-02</guid>
            <pubDate>Fri, 27 Jun 2025 11:09:40 GMT</pubDate>
            <description><![CDATA[<h1 id="정보-단위부터-문자-인코딩까지">정보 단위부터 문자 인코딩까지</h1>
<h2 id="정보의-단위">정보의 단위</h2>
<ul>
<li><strong>bit</strong>: 0과 1을 나타내는 가장 작은 정보 단위  </li>
<li><strong>byte</strong>: 8개의 비트를 묶은 단위</li>
</ul>
<blockquote>
<p>💡 
<strong>1kB = 1,000 byte</strong><br><strong>1KiB = 1,024 byte</strong><br>(kB는 10진수 기준, KiB는 2진수 기준)</p>
</blockquote>
<hr>
<h2 id="이진법에서의-음수-표현">이진법에서의 음수 표현</h2>
<p>컴퓨터에서 음수를 표현할 때 가장 널리 쓰이는 방식은 <strong>2의 보수(Two’s Complement)</strong>이다.</p>
<ul>
<li><p><strong>2의 보수란?</strong><br>어떤 수를 그보다 큰 <code>2ⁿ</code>에서 뺀 값<br>예: 8비트 기준이면 <code>2⁸ = 256</code>, <code>-5</code>는 <code>256 - 5 = 251</code></p>
</li>
<li><p><strong>쉽게 생각하면</strong>  </p>
<blockquote>
<p>모든 0과 1을 뒤집고(1의 보수) → 거기에 <strong>1을 더한 값</strong></p>
</blockquote>
</li>
</ul>
<p>또한 컴퓨터 내부에서는 <strong>양수와 음수를 구분하기 위해 플래그 비트</strong>(보통 최상위 비트)를 사용한다.</p>
<hr>
<h2 id="16진수의-사용">16진수의 사용</h2>
<p>이진수만으로 정보를 표현하면 <strong>길이가 너무 길어지는 단점</strong>이 있다.<br>그래서 컴퓨터에서는 종종 <strong>16진수</strong>를 사용한다.</p>
<ul>
<li><strong>16진수는 4비트로 1자리를 표현</strong>할 수 있어,
이진수보다 <strong>짧고 가독성이 좋다</strong></li>
<li>예: <code>0xF</code>는 4비트 이진수 <code>1111</code>에 해당</li>
</ul>
<hr>
<h2 id="문자-집합과-인코딩">문자 집합과 인코딩</h2>
<ul>
<li><strong>문자 집합(Character Set)</strong>:  
컴퓨터가 표현할 수 있는 문자들의 모음</li>
<li><strong>문자 인코딩(Encoding)</strong>:  
문자를 컴퓨터가 이해할 수 있도록 <strong>0과 1로 변환</strong>하는 과정</li>
<li><strong>문자 디코딩(Decoding)</strong>:  
<strong>0과 1의 코드 → 사람이 이해할 수 있는 문자</strong>로 바꾸는 과정</li>
</ul>
<hr>
<h2 id="아스키-코드-ascii">아스키 코드 (ASCII)</h2>
<ul>
<li><strong>7비트 인코딩</strong>으로 <strong>128개의 문자</strong> 표현 가능</li>
<li>영어, 숫자, 특수문자 등은 표현 가능하지만 <strong>한글은 표현 불가</strong></li>
</ul>
<hr>
<h2 id="한글-인코딩-방식">한글 인코딩 방식</h2>
<h3 id="1-완성형-인코딩-euc-kr-등">1. 완성형 인코딩 (EUC-KR 등)</h3>
<ul>
<li>초성, 중성, 종성을 <strong>미리 조합한 글자 단위</strong>에 고유 코드를 부여</li>
<li>예: &quot;가&quot;, &quot;각&quot;, &quot;간&quot;처럼 완성된 글자에만 코드 부여</li>
<li>대표 인코딩: <strong>EUC-KR</strong><ul>
<li>약 <strong>2,350자</strong> 표현 가능</li>
<li>단점: <strong>문자 집합에 없는 글자는 표현 불가</strong></li>
<li>이를 보완한 방식이 <strong>CP949</strong></li>
</ul>
</li>
</ul>
<blockquote>
<p>하지만 <strong>CP949도 모든 한글을 표현하기엔 부족</strong>하다.</p>
</blockquote>
<hr>
<h3 id="2-조합형-인코딩">2. 조합형 인코딩</h3>
<ul>
<li>초성, 중성, 종성 각각에 코드를 부여하고 <strong>조합해서 글자 생성</strong></li>
<li>장점: 모든 조합을 표현할 수 있지만 구현이 복잡하고 비표준화 문제 발생</li>
</ul>
<hr>
<h2 id="유니코드unicode">유니코드(Unicode)</h2>
<ul>
<li>전 세계 대부분의 문자, 특수문자, 이모티콘까지 표현 가능한 <strong>글로벌 표준 문자 집합</strong></li>
<li>하나의 코드로 거의 <strong>모든 문자 표현 가능</strong></li>
<li>유니코드는 <strong>글자에 부여된 값 자체를 저장하지 않고</strong>, 다양한 인코딩 방식 사용:<ul>
<li><strong>UTF-8</strong>: 가변 길이 인코딩, <strong>웹에서 가장 많이 사용됨</strong></li>
<li><strong>UTF-16</strong>: 2바이트 또는 4바이트 사용</li>
<li><strong>UTF-32</strong>: 고정 4바이트, 메모리 사용 많지만 처리 간편</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[💻 컴퓨터 구조 Chapter 01]]></title>
            <link>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-01</link>
            <guid>https://velog.io/@dus_snp/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-Chapter-01</guid>
            <pubDate>Fri, 20 Jun 2025 07:32:31 GMT</pubDate>
            <description><![CDATA[<h2 id="컴퓨터-구조를-알아야-하는-이유">컴퓨터 구조를 알아야 하는 이유</h2>
<ul>
<li><strong>성능</strong>, <strong>용량</strong>, <strong>비용</strong>을 계산할 수 있기 때문  </li>
<li>프로그램이 실제 하드웨어에서 <strong>어떻게 작동하는지</strong> 이해할 수 있음</li>
</ul>
<hr>
<h2 id="컴퓨터-구조의-핵심-구성">컴퓨터 구조의 핵심 구성</h2>
<p>크게 두 가지로 나뉨:</p>
<ol>
<li><strong>컴퓨터가 이해하는 정보</strong></li>
<li><strong>컴퓨터의 4가지 핵심 부품</strong></li>
</ol>
<hr>
<h2 id="컴퓨터가-이해하는-정보">컴퓨터가 이해하는 정보</h2>
<h3 id="●-데이터">● 데이터</h3>
<ul>
<li>컴퓨터가 처리하는 정적인 정보</li>
<li>예: 숫자, 문자, 이미지, 동영상 등</li>
</ul>
<h3 id="●-명령어">● 명령어</h3>
<ul>
<li>데이터를 처리하고 컴퓨터를 작동시키는 지시 정보</li>
<li>프로그램 = 명령어 + 데이터</li>
</ul>
<hr>
<h2 id="컴퓨터의-4가지-핵심-부품">컴퓨터의 4가지 핵심 부품</h2>
<h3 id="중앙처리장치-cpu">중앙처리장치 (CPU)</h3>
<ul>
<li>컴퓨터의 <strong>두뇌</strong></li>
<li>메모리에 저장된 <strong>명령어를 읽고 해석하고 실행</strong>하는 역할</li>
<li>다음 3가지 구성 요소로 나뉨:</li>
</ul>
<h4 id="alu-산술논리연산장치">ALU (산술논리연산장치)</h4>
<ul>
<li>계산과 논리 연산을 담당</li>
<li>컴퓨터 내부의 <strong>계산기</strong> 역할</li>
</ul>
<h4 id="레지스터">레지스터</h4>
<ul>
<li>CPU 내부의 작은 <strong>임시 저장소</strong></li>
<li>명령 실행에 필요한 <strong>값들을 잠시 저장</strong></li>
</ul>
<h4 id="제어장치">제어장치</h4>
<ul>
<li>명령어를 <strong>해석</strong>하고</li>
<li>다른 부품에 <strong>제어신호</strong>를 보내는 역할</li>
</ul>
<hr>
<h3 id="주기억장치-메모리">주기억장치 (메모리)</h3>
<ul>
<li>현재 <strong>실행 중인 프로그램의 명령어와 데이터</strong> 저장</li>
<li>프로그램이 실행되기 위해선 <strong>메모리에 로드</strong>되어야 함</li>
<li>주소(Address) 개념을 사용해 빠르게 접근</li>
</ul>
<hr>
<h3 id="보조기억장치">보조기억장치</h3>
<ul>
<li>메모리는 <strong>휘발성 + 고가 + 용량 제한</strong>이 있음</li>
<li>장기 보관용으로 <strong>보조기억장치 필요</strong></li>
<li>예: HDD, SSD, USB, DVD, CD-ROM 등</li>
<li>비교 요약:  <ul>
<li>메모리 → <em>실행 중인</em> 프로그램 저장  </li>
<li>보조기억장치 → <em>보관용</em> 프로그램 저장</li>
</ul>
</li>
</ul>
<hr>
<h3 id="입출력장치-io-device">입출력장치 (I/O Device)</h3>
<ul>
<li>컴퓨터 <strong>외부와 정보 교환</strong>하는 장치</li>
<li>예: 마이크, 스피커, 프린터, 마우스, 키보드 등</li>
</ul>
<hr>
<h2 id="메인보드-motherboard">메인보드 (Motherboard)</h2>
<ul>
<li>컴퓨터 부품을 장착할 수 있는 <strong>중앙 회로판</strong></li>
<li>내부에 다양한 <strong>슬롯</strong>과 <strong>연결 단자</strong>가 있음</li>
<li>부품 간 정보 전달은 <strong>버스(Bus)</strong>를 통해 이루어짐</li>
<li>가장 핵심적인 버스: <strong>시스템 버스</strong></li>
</ul>
<hr>
<h2 id="시스템-버스-구성">시스템 버스 구성</h2>
<p>시스템 버스는 아래 3가지로 구성됨:</p>
<ul>
<li><p><strong>주소 버스 (Address Bus)</strong>  </p>
<ul>
<li>메모리의 <strong>주소 정보를 전달</strong></li>
</ul>
</li>
<li><p><strong>데이터 버스 (Data Bus)</strong>  </p>
<ul>
<li>명령어와 데이터 <strong>내용을 전달</strong></li>
</ul>
</li>
<li><p><strong>제어 버스 (Control Bus)</strong>  </p>
<ul>
<li><strong>제어 신호</strong>를 전달하여 동작을 조율</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[운영체제(Operating System) 정리]]></title>
            <link>https://velog.io/@dus_snp/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COperating-System-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@dus_snp/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COperating-System-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 15 Apr 2025 10:40:27 GMT</pubDate>
            <description><![CDATA[<h1 id="1강">1강</h1>
<h2 id="📌-운영체제란">📌 운영체제란?</h2>
<p>운영체제(Operating System, OS)는 <strong>하드웨어를 효율적으로 사용하게 해주는 소프트웨어</strong>이며, 사용자와 하드웨어 간의 인터페이스 역할을 한다.</p>
<ul>
<li><strong>컴퓨팅 자원의 추상화</strong>를 제공</li>
<li><strong>자원 관리 정책의 결정, 운용, 강제</strong> 수행</li>
</ul>
<hr>
<h2 id="🧩-운영체제의-주요-기능">🧩 운영체제의 주요 기능</h2>
<ul>
<li><p><strong>하드웨어 장치 관리</strong><br>장치 초기화, 입출력 처리, 장치 제어</p>
</li>
<li><p><strong>프로그램 관리</strong><br>프로그램의 적재, 실행, 오류 처리<br>다중 프로그램 실행 지원</p>
</li>
<li><p><strong>사용자 관리</strong><br>사용자 인증 및 권한 제어, 데이터 접근 제어</p>
</li>
<li><p><strong>서비스 관리</strong><br>네트워크, 파일 시스템, 시스템 서비스 관리</p>
</li>
</ul>
<hr>
<h2 id="🧭-운영체제와-일반-애플리케이션의-차이점">🧭 운영체제와 일반 애플리케이션의 차이점</h2>
<ul>
<li>OS는 <strong>항상 동작 중</strong>이며 자원을 감시하고 통제</li>
<li><strong>하드웨어 제어 권한</strong>을 가짐</li>
</ul>
<hr>
<h2 id="⚙️-운영체제의-구성-요소">⚙️ 운영체제의 구성 요소</h2>
<ul>
<li><strong>커널(Kernel)</strong> : OS의 핵심. 하드웨어와 직접 상호작용</li>
<li><strong>OS 서비스</strong> : 보안 모니터, 윈도우 매니저 등 시스템 제공 기능</li>
<li><strong>라이브러리</strong> : 자주 사용하는 함수 및 서브루틴 집합</li>
</ul>
<blockquote>
<p>Kernel 중심으로 OS를 정의하는 관점도 존재</p>
</blockquote>
<hr>
<h1 id="2강">2강</h1>
<h2 id="💡-os-설계-시-고려-사항">💡 OS 설계 시 고려 사항</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>옵션 A</th>
<th>옵션 B</th>
</tr>
</thead>
<tbody><tr>
<td>용도</td>
<td>범용 시스템 (General Purpose)</td>
<td>특수 목적 시스템 (Specific Purpose)</td>
</tr>
<tr>
<td>설계</td>
<td>유연성 (Flexibility)</td>
<td>견고함 (Robustness)</td>
</tr>
<tr>
<td>목표</td>
<td>고성능 (High Performance)</td>
<td>보안성 / 저비용 (Security / Low Cost)</td>
</tr>
</tbody></table>
<hr>
<h2 id="🖥-전형적인-컴퓨터-시스템-구조">🖥 전형적인 컴퓨터 시스템 구조</h2>
<ul>
<li><strong>Hardware</strong>: CPU, Memory, Chipset, I/O Bus, 주변장치 등</li>
<li><strong>System Software</strong>: OS, DBMS, 하이퍼바이저, 컴파일러, 링커 등</li>
<li><strong>Application</strong>: 사용자가 실행하는 응용 프로그램들</li>
</ul>
<hr>
<h2 id="🧱-전형적인-os-구조">🧱 전형적인 OS 구조</h2>
<pre><code>User Level
 └── Application
 └── Libraries (공용 함수 모음)

Kernel Level
 └── Portal OS Layer (시스템 호출 담당)
 └── Machine-Dependent Layer (부트로더, 디바이스 드라이버 등)</code></pre><p><img src="https://velog.velcdn.com/images/dus_snp/post/72590e52-674f-46ca-9689-6b6b1a4f5d44/image.jpg" alt=""></p>
<hr>
<h2 id="🔄-멀티태스킹과-os-구성-요소">🔄 멀티태스킹과 OS 구성 요소</h2>
<p><strong>멀티태스킹</strong>: 하나 이상의 프로그램이 동시에 실행되는 것</p>
<h3 id="1-프로세스-관리">1. 프로세스 관리</h3>
<ul>
<li>목표: I/O와 계산 동시 처리, 시간 공유, 다중 CPU 지원</li>
<li>유의점: 자원 낭비 방지, 동기화, 상호 배제, 공정성, 교착 상태 방지</li>
</ul>
<h3 id="2-메모리-관리">2. 메모리 관리</h3>
<ul>
<li>목표: 편리한 프로그래밍, 메모리 효율성, 보조 저장소 전송</li>
<li>유의점: 보호 및 공정한 분배</li>
</ul>
<h3 id="3-io-장치-관리">3. I/O 장치 관리</h3>
<ul>
<li>목표: 장치-애플리케이션 간 상호작용, 새 장치 대응</li>
<li>유의점: 효율성, 보호, 공유</li>
</ul>
<h3 id="4-파일-시스템">4. 파일 시스템</h3>
<ul>
<li>목표: 디스크 블록 관리, 파일-디스크 매핑</li>
<li>유의점: 신뢰성, 안정성, 효율성, 관리 용이성</li>
<li>일반 동작: 파일 열기 → 읽기/쓰기 → 닫기</li>
</ul>
<hr>
<h2 id="🧾-컴퓨터-프로그램이란">🧾 컴퓨터 프로그램이란?</h2>
<ul>
<li><strong>명령어(Instructions)</strong>: CPU가 처리하는 기계어 코드</li>
<li><strong>데이터(Data)</strong>: 명령어가 읽고 쓰는 자료</li>
<li><strong>코딩(Coding)</strong>: 프로그래밍 언어로 명령어를 기술하는 행위</li>
<li><strong>프로그램 이미지</strong>: 실행 가능한 형태의 데이터 묶음<br>(Object File, Executable File 등)</li>
</ul>
<hr>
<h2 id="📦-응용프로그램의-메모리-구성">📦 응용프로그램의 메모리 구성</h2>
<p>응용 프로그램은 4개의 세그먼트로 구성된다.</p>
<table>
<thead>
<tr>
<th>세그먼트</th>
<th>설명</th>
<th>메모리 할당</th>
</tr>
</thead>
<tbody><tr>
<td>Code</td>
<td>명령어 저장</td>
<td>낮은 주소</td>
</tr>
<tr>
<td>Data</td>
<td>전역/정적 변수</td>
<td>낮은 주소</td>
</tr>
<tr>
<td>Heap</td>
<td>동적 할당 영역</td>
<td>높은 주소 → 낮은 방향으로 확장</td>
</tr>
<tr>
<td>Stack</td>
<td>함수 호출, 지역변수</td>
<td>낮은 주소 ← 높은 방향으로 확장</td>
</tr>
</tbody></table>
<blockquote>
<p>힙과 스택은 서로 반대 방향으로 확장하여 충돌을 방지함</p>
</blockquote>
<img src="https://velog.velcdn.com/images/dus_snp/post/da122ed2-083c-4eaa-ba52-f5923a3111a3/image.jpg" height="200" />

<hr>
<h2 id="🔍-프로그램-실행-순서">🔍 프로그램 실행 순서</h2>
<p><img src="https://velog.velcdn.com/images/dus_snp/post/ac246c68-71b9-4d3b-adf5-955e6dbcb35b/image.jpg" alt=""></p>
<hr>
<h2 id="🚀-부트스트랩-과정">🚀 부트스트랩 과정</h2>
<h3 id="부트스트랩bootstrap-과정">부트스트랩(Bootstrap) 과정</h3>
<p>컴퓨터 전원 On → OS 실행까지의 순서:</p>
<ol>
<li>전원 On  </li>
<li><strong>BIOS</strong> (ROM에 저장된 펌웨어)가 실행  </li>
<li>BIOS가 <strong>부트로더</strong>를 메모리에 적재  </li>
<li>부트로더가 OS <strong>커널</strong>을 메모리에 적재  </li>
<li>커널이 메모리에 올라오면 운영체제 시작</li>
</ol>
<hr>
<h3 id="❗-bios는-디스크에-존재할-수-있는가">❗ BIOS는 디스크에 존재할 수 있는가?</h3>
<p>아니다.  </p>
<blockquote>
<p>BIOS는 디스크 <strong>초기화 전</strong>에 실행되어야 하므로 ROM에 존재한다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로세스 상태 및 구조]]></title>
            <link>https://velog.io/@dus_snp/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C-%EB%B0%8F-%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@dus_snp/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C-%EB%B0%8F-%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Tue, 08 Apr 2025 16:29:00 GMT</pubDate>
            <description><![CDATA[<h1 id="프로세스의-상태와-계층-구조">프로세스의 상태와 계층 구조</h1>
<p>운영체제를 깊이 이해하려면, 프로세스의 상태 변화와 생성 구조를 반드시 알아야 합니다.<br>이 글에서는 <strong>프로세스의 상태(state)</strong>, <strong>계층 구조</strong>, 그리고 <strong>프로세스 생성 방식(fork/exec)</strong>을 다뤄보겠습니다.</p>
<hr>
<h2 id="🧠-프로세스의-상태">🧠 프로세스의 상태</h2>
<p>운영체제는 프로세스를 다음과 같은 5가지 상태로 구분하여 관리한다.</p>
<table>
<thead>
<tr>
<th>상태</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>생성 상태 (new)</strong></td>
<td>프로세스가 생성 중인 초기 상태. PCB가 할당됨</td>
</tr>
<tr>
<td><strong>준비 상태 (ready)</strong></td>
<td>CPU 할당을 기다리는 대기 상태</td>
</tr>
<tr>
<td><strong>실행 상태 (running)</strong></td>
<td>CPU를 할당받아 실제 실행 중인 상태</td>
</tr>
<tr>
<td><strong>대기 상태 (waiting)</strong></td>
<td>입출력 작업 등을 기다리며 대기하는 상태</td>
</tr>
<tr>
<td><strong>종료 상태 (terminated)</strong></td>
<td>프로세스가 종료된 상태. PCB와 메모리가 정리됨</td>
</tr>
</tbody></table>
<p>📌 <strong>상태 전이 예시</strong>  </p>
<ul>
<li>실행 중 타이머 인터럽트 발생 → 다시 준비 상태로 전환  </li>
<li>실행 중 입출력 요청 발생 → 대기 상태로 전환  </li>
<li>입출력 완료 → 준비 상태 복귀</li>
</ul>
<hr>
<h2 id="🌳프로세스의-계층-구조">🌳프로세스의 계층 구조</h2>
<p>운영체제는 프로세스를 <strong>트리 형태로 계층적</strong>으로 관리한다.</p>
<h3 id="🧩-부모와-자식-프로세스">🧩 부모와 자식 프로세스</h3>
<ul>
<li>프로세스가 시스템 호출을 통해 새로운 프로세스를 생성하면,<ul>
<li><strong>생성자 = 부모 프로세스</strong></li>
<li><strong>생성된 프로세스 = 자식 프로세스</strong></li>
</ul>
</li>
<li>각 프로세스는 고유한 PID를 갖는다.</li>
<li>일부 운영체제는 PCB에 부모의 PID(<code>PPID</code>)를 기록함.</li>
</ul>
<h3 id="🌲-계층-구조">🌲 계층 구조</h3>
<ul>
<li>컴퓨터 부팅 시 <strong>최초의 프로세스</strong>가 생성됨</li>
<li>이후 자식 프로세스들이 연속적으로 생성되어 <strong>트리 구조</strong> 형성</li>
</ul>
<table>
<thead>
<tr>
<th>운영체제</th>
<th>최초 프로세스명</th>
<th>PID</th>
</tr>
</thead>
<tbody><tr>
<td>Unix</td>
<td><code>init</code></td>
<td>1</td>
</tr>
<tr>
<td>Linux</td>
<td><code>systemd</code></td>
<td>1</td>
</tr>
<tr>
<td>macOS</td>
<td><code>launchd</code></td>
<td>1</td>
</tr>
</tbody></table>
<blockquote>
<p>🔍 <code>pstree</code> 명령어를 통해 현재 시스템의 프로세스 계층 구조를 시각화할 수 있다.</p>
</blockquote>
<hr>
<h2 id="🔧-프로세스-생성-기법">🔧 프로세스 생성 기법</h2>
<p>운영체제는 <strong><code>fork()</code>와 <code>exec()</code> 시스템 호출</strong>을 이용해 새로운 프로세스를 생성한다.</p>
<h3 id="1️⃣-fork---복사">1️⃣ <code>fork()</code> - 복사</h3>
<ul>
<li>부모 프로세스를 그대로 복사하여 자식 프로세스를 생성</li>
<li>PID와 메모리 위치는 다르지만, <strong>코드, 데이터 등은 동일</strong></li>
<li>자식이 바로 <code>exec()</code>를 호출하지 않으면, <strong>부모와 동일한 코드 실행</strong></li>
</ul>
<h3 id="2️⃣-exec---변환">2️⃣ <code>exec()</code> - 변환</h3>
<ul>
<li>자식 프로세스가 실행 중인 코드를 <strong>다른 프로그램으로 교체</strong></li>
<li>코드 영역과 데이터 영역을 새로운 프로그램으로 덮어씀</li>
<li>나머지 영역(힙, 스택)은 초기화됨</li>
</ul>
<blockquote>
<p>📌 자식 프로세스를 독립적인 새 프로그램으로 만들고 싶다면, <code>fork()</code> 후 <code>exec()</code> 호출이 필수</p>
</blockquote>
<hr>
<h2 id="🧾-정리">🧾 정리</h2>
<ul>
<li>프로세스는 <strong>상태에 따라 동작 흐름이 전환</strong>되고,  </li>
<li><strong>트리 구조로 계층화</strong>되어 관리되며,  </li>
<li><strong><code>fork</code>와 <code>exec</code>의 반복을 통해</strong> 생성된다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로세스 개요]]></title>
            <link>https://velog.io/@dus_snp/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@dus_snp/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Sun, 06 Apr 2025 13:12:52 GMT</pubDate>
            <description><![CDATA[<h1 id="💡프로세스와-pcb-메모리-구조">💡프로세스와 PCB, 메모리 구조</h1>
<p>운영체제를 이해하기 위해 반드시 짚고 넘어가야 할 핵심 개념이 있다.<br>바로 <strong>프로세스(Process)</strong> 와 이를 운영체제가 어떻게 관리하는가에 대한 이야기다.</p>
<hr>
<h2 id="🧠-프로세스란">🧠 프로세스란?</h2>
<p>컴퓨터는 부팅과 동시에 수많은 <strong>프로세스</strong>를 실행한다.</p>
<h3 id="✅-포어그라운드-vs-백그라운드">✅ 포어그라운드 vs 백그라운드</h3>
<ul>
<li><strong>포어그라운드 프로세스</strong>: 사용자가 직접 확인 가능한 실행 중인 프로세스</li>
<li><strong>백그라운드 프로세스</strong>: 사용자 눈에 보이지 않는 곳에서 실행됨<ul>
<li>사용자와 <strong>직접 상호작용</strong>하는 경우도 있고,</li>
<li><strong>자율적으로 동작</strong>하는 경우도 있음<br>→ 유닉스: <strong>데몬(Daemon)</strong>, 윈도우: <strong>서비스(Service)</strong> 라고 부름</li>
</ul>
</li>
</ul>
<hr>
<h2 id="⚙️-운영체제의-프로세스-관리">⚙️ 운영체제의 프로세스 관리</h2>
<p>운영체제는 <strong>프로세스의 실행 순서</strong>를 제어하고, <strong>자원을 분배</strong>한다.<br>이를 위해 사용하는 구조가 바로 <strong>PCB (Process Control Block)</strong> 이다.</p>
<hr>
<h2 id="📋-pcb란-무엇인가">📋 PCB란 무엇인가?</h2>
<p><strong>PCB(Process Control Block)</strong> 는 프로세스에 대한 정보를 저장하는 커널의 자료 구조이다.</p>
<h3 id="📌-역할">📌 역할</h3>
<ul>
<li>각 프로세스를 식별하고 관리</li>
<li>커널 영역에서 생성 및 소멸</li>
<li>프로세스의 생성/종료와 함께 PCB도 생성/삭제됨</li>
</ul>
<hr>
<h2 id="📁-pcb에-저장되는-정보-목록">📁 PCB에 저장되는 정보 목록</h2>
<ul>
<li><p><strong>프로세스 ID (PID)</strong><br>고유 식별 번호 (같은 프로그램을 2번 실행하면 서로 다른 PID 부여)</p>
</li>
<li><p><strong>레지스터 값</strong><br>프로세스의 실행 상태 복원을 위한 저장 값 (문맥 저장용)</p>
</li>
<li><p><strong>CPU 스케줄링 정보</strong><br>어떤 프로세스가 언제 CPU를 할당받을지 결정하는 데 필요</p>
</li>
<li><p><strong>메모리 관리 정보</strong><br>메모리 주소, 베이스/한계 레지스터, 페이지 테이블 정보 등</p>
</li>
<li><p><strong>파일/입출력 장치 목록</strong><br>프로세스가 열어둔 파일, 사용하는 장치 목록 등</p>
</li>
</ul>
<hr>
<h2 id="🔄-문맥-교환-context-switching">🔄 문맥 교환 (Context Switching)</h2>
<p>프로세스 실행이 전환될 때, 운영체제는 다음을 수행한다:</p>
<ol>
<li><strong>현재 프로세스의 정보(문맥)를 PCB에 저장</strong>  </li>
<li><strong>새로운 프로세스의 문맥을 복원하여 실행 이어감</strong></li>
</ol>
<blockquote>
<p>⏱️ 문맥 교환은 매우 빠르게 일어나기 때문에 사용자 입장에서는 여러 프로세스가 동시에 실행되는 것처럼 보임</p>
</blockquote>
<p>⚠️ 하지만 <strong>너무 잦은 문맥 교환은 오버헤드</strong>를 유발할 수 있으므로 빈도 조절이 중요하다.</p>
<hr>
<h2 id="🧩-프로세스의-메모리-구조">🧩 프로세스의 메모리 구조</h2>
<blockquote>
<p>💡메모리 구조를 이해하면, 메모리 누수나 오버플로우 같은 오류를 사전에 방지할 수 있다.</p>
</blockquote>
<p>운영체제는 사용자 영역에서 다음과 같이 프로세스 메모리를 구분한다:</p>
<h3 id="🧱-정적-할당-영역-static-allocation-area">🧱 정적 할당 영역 (Static Allocation Area)</h3>
<h4 id="🔹-코드-영역-code-segment">🔹 코드 영역 (Code Segment)</h4>
<ul>
<li><strong>기계어 명령어</strong>가 저장되는 영역</li>
<li>CPU가 실행할 수 있는 <strong>실행 파일의 텍스트 코드</strong></li>
<li>읽기 전용 (수정 불가)</li>
</ul>
<h4 id="🔹-데이터-영역-data-segment">🔹 데이터 영역 (Data Segment)</h4>
<ul>
<li><strong>전역 변수</strong>, <strong>정적 변수</strong>가 저장됨</li>
<li>프로그램 실행 내내 유지됨</li>
<li>실행 중 값은 변경 가능하나 <strong>영역 자체의 크기는 고정</strong></li>
</ul>
<blockquote>
<p>✅ 이 두 영역은 프로그램이 실행되기 전부터 크기와 구조가 정해져 있으므로 <strong>정적 할당 영역</strong>이라 한다.</p>
</blockquote>
<hr>
<h3 id="🔄-동적-할당-영역-dynamic-allocation-area">🔄 동적 할당 영역 (Dynamic Allocation Area)</h3>
<h4 id="🔹-힙-영역-heap-segment">🔹 힙 영역 (Heap Segment)</h4>
<ul>
<li>프로그래머가 <strong>직접 동적으로 메모리 할당</strong> (<code>malloc</code>, <code>new</code> 등)</li>
<li>수동으로 해제하지 않으면 <strong>메모리 누수</strong> 발생 가능</li>
<li>크기 유동적이며 실행 중 계속 변할 수 있음</li>
</ul>
<h4 id="🔹-스택-영역-stack-segment">🔹 스택 영역 (Stack Segment)</h4>
<ul>
<li><strong>함수 호출 시 생성되는 매개변수, 지역 변수</strong> 저장</li>
<li>함수 종료 시 자동 소멸 (Last In First Out 구조)</li>
<li><code>PUSH</code> / <code>POP</code> 방식으로 작동</li>
</ul>
<p>📌 <strong>정리</strong></p>
<ul>
<li>힙 영역: 낮은 주소 → 높은 주소로 성장  </li>
<li>스택 영역: 높은 주소 → 낮은 주소로 성장  </li>
<li>서로 반대 방향으로 커지므로, <strong>충돌하지 않도록 주의</strong>해야 함</li>
</ul>
<blockquote>
<p>✅ 이 두 영역은 프로그램 실행 중 동적으로 크기가 변하므로 <strong>동적 할당 영역</strong>이라 부른다.</p>
</blockquote>
<hr>
<h2 id="📌-마무리">📌 마무리</h2>
<p>운영체제는 단순히 프로세스를 실행하는 것이 아니라,<br><strong>PCB를 통해 정보를 저장하고</strong>, <strong>문맥을 교환하며</strong>, <strong>메모리 구조를 세밀하게 관리</strong>한다.</p>
<p>이러한 구조를 이해하는 것은 시스템 성능과 안정성의 핵심을 파악하는 데 반드시 필요하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[운영체제 구성]]></title>
            <link>https://velog.io/@dus_snp/zvuu6aqr</link>
            <guid>https://velog.io/@dus_snp/zvuu6aqr</guid>
            <pubDate>Sun, 06 Apr 2025 11:12:23 GMT</pubDate>
            <description><![CDATA[<h1 id="💡운영체제의-핵심-개념">💡운영체제의 핵심 개념</h1>
<p>운영체제는 <strong>사용자를 위한 프로그램이 아니라, 사용자가 실행하는 프로그램을 위한 프로그램</strong>이다.<br>즉, 응용 프로그램이 안전하고 효율적으로 실행되도록 시스템 자원을 관리하고 제어하는 핵심적인 소프트웨어다.</p>
<hr>
<h2 id="운영체제의-구성-요소-🧩">운영체제의 구성 요소 🧩</h2>
<h3 id="✅-커널-kernel">✅ 커널 (Kernel)</h3>
<p>운영체제의 핵심 서비스를 담당하는 부분으로, 다음과 같은 역할을 수행한다:</p>
<ul>
<li>하드웨어 자원 접근 및 조작</li>
<li>프로그램이 <strong>올바르고 안전하게 실행</strong>되도록 제어</li>
<li>프로세스, 메모리, 입출력 등의 핵심 기능 관리</li>
</ul>
<blockquote>
<p>커널은 메모리 상에서 <strong>커널 모드</strong>로만 접근 가능한 보호된 영역이다.</p>
</blockquote>
<hr>
<h3 id="✅-사용자-인터페이스-user-interface">✅ 사용자 인터페이스 (User Interface)</h3>
<p>운영체제와 사용자가 <strong>상호작용할 수 있는 통로</strong>이다. 커널에 포함된 기능은 아니다.</p>
<ul>
<li><strong>GUI (Graphic User Interface)</strong>: 그래픽 요소를 통해 상호작용 (예: 윈도우, 아이콘)</li>
<li><strong>CLI (Command Line Interface)</strong>: 명령어 기반 상호작용 (예: 터미널, 쉘)</li>
</ul>
<hr>
<h2 id="이중-모드-dual-mode-🖥️">이중 모드 (Dual Mode) 🖥️</h2>
<p>CPU는 명령어를 실행할 때 <strong>두 가지 모드</strong> 중 하나로 동작한다.</p>
<h3 id="👤-사용자-모드-user-mode">👤 사용자 모드 (User Mode)</h3>
<ul>
<li>일반적인 응용 프로그램이 실행되는 영역</li>
<li><strong>커널 영역 접근 불가</strong>, 하드웨어 직접 조작 불가</li>
</ul>
<h3 id="🛡️-커널-모드-kernel-mode">🛡️ 커널 모드 (Kernel Mode)</h3>
<ul>
<li>커널 코드를 실행할 수 있는 <strong>운영체제 전용 모드</strong></li>
<li>모든 명령어와 하드웨어 자원 접근 가능</li>
</ul>
<h3 id="🔁-시스템-호출-system-call">🔁 시스템 호출 (System Call)</h3>
<p>사용자 모드에서 운영체제의 기능이 필요할 때, <strong>커널 모드로 전환</strong>하기 위한 요청</p>
<ul>
<li>일종의 <strong>인터럽트</strong>로 동작</li>
<li>CPU는 현재 작업을 백업하고 커널로 진입 → 작업 수행 → 원래 작업으로 복귀</li>
</ul>
<p>📂 <strong>시스템 호출의 예시</strong></p>
<ul>
<li>프로세스 생성/종료</li>
<li>파일 생성/열기/저장</li>
<li>디렉터리 관리</li>
<li>디스크 및 장치 접근</li>
</ul>
<hr>
<h2 id="운영체제의-핵심-서비스-🔧">운영체제의 핵심 서비스 🔧</h2>
<h3 id="📌-프로세스-관리">📌 프로세스 관리</h3>
<ul>
<li>프로세스: <strong>실행 중인 프로그램</strong></li>
<li>CPU는 한 번에 하나의 프로세스만 실행 → <strong>CPU 스케줄링</strong> 필요</li>
</ul>
<h3 id="📌-메모리-관리">📌 메모리 관리</h3>
<ul>
<li>실행 중인 프로세스를 메모리에 적절히 할당/해제</li>
</ul>
<h3 id="📌-입출력-관리">📌 입출력 관리</h3>
<ul>
<li>장치의 <strong>인터럽트 요청</strong>을 처리하여 입출력 수행</li>
</ul>
<h3 id="📌-파일-시스템-관리">📌 파일 시스템 관리</h3>
<ul>
<li>파일 생성/저장/삭제/탐색 등</li>
</ul>
<hr>
<h2 id="핵심-정리-🧠">핵심 정리 🧠</h2>
<ul>
<li>운영체제의 핵심 기능은 <strong>커널</strong>이 담당</li>
<li>사용자 프로세스가 운영체제 서비스를 사용하려면 → <strong>시스템 콜을 통해 커널 모드로 전환</strong></li>
<li>커널은 CPU, 메모리, 입출력 장치, 파일 시스템 등을 관리하는 중심 요소</li>
</ul>
<hr>
<h2 id="더-알아보기-가상-머신과-하이퍼바이저-모드-🧱">더 알아보기: 가상 머신과 하이퍼바이저 모드 🧱</h2>
<h3 id="🧪-가상-머신virtual-machine">🧪 가상 머신(Virtual Machine)</h3>
<ul>
<li>소프트웨어로 구현한 <strong>가상의 컴퓨터</strong></li>
<li>하나의 컴퓨터에 여러 운영체제와 프로그램 설치 가능</li>
<li>가상 머신 자체는 응용 프로그램으로 취급됨</li>
</ul>
<h3 id="🔐-하이퍼바이저-모드-hypervisor-mode">🔐 하이퍼바이저 모드 (Hypervisor Mode)</h3>
<ul>
<li>가상 머신이 <strong>커널 모드로 직접 접근하기 어려운 문제</strong>를 해결하기 위해 생긴 새로운 CPU 모드</li>
<li>하드웨어 가상화를 지원하는 CPU는 커널 모드 외에 <strong>하이퍼바이저 전용 모드</strong>를 제공</li>
</ul>
<hr>
<blockquote>
<p>📘 운영체제를 이해하는 것은 시스템을 제어하고 최적화할 수 있는 첫걸음이다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[운영체제 시작]]></title>
            <link>https://velog.io/@dus_snp/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-9-1</link>
            <guid>https://velog.io/@dus_snp/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-9-1</guid>
            <pubDate>Sat, 05 Apr 2025 15:11:07 GMT</pubDate>
            <description><![CDATA[<h1 id="💡운영체제란-무엇인가">💡운영체제란 무엇인가?</h1>
<p>운영체제(OS, Operating System)는<br><strong>실행할 프로그램에 필요한 시스템 자원을 할당하고, 프로그램이 올바르게 실행되도록 관리하는 특별한 프로그램</strong>이다.</p>
<blockquote>
<p>운영체제도 하나의 프로그램이므로, 실행되기 위해 메모리에 적재된다.</p>
</blockquote>
<hr>
<h2 id="🔧-운영체제의-핵심-역할">🔧 운영체제의 핵심 역할</h2>
<p>운영체제는 단순한 소프트웨어가 아니다.<br><strong>하드웨어 자원과 응용 프로그램 사이에서 중심적인 역할</strong>을 수행한다.</p>
<h3 id="✅-1-자원-할당-및-관리">✅ 1. 자원 할당 및 관리</h3>
<ul>
<li>프로그램 실행에 필요한 요소(메모리, CPU 등 컴퓨터 부품)를 적절히 분배</li>
<li>응용 프로그램을 메모리에 적재하고 필요 시 삭제</li>
<li><strong>메모리를 사용자 영역과 커널 영역으로 구분</strong>하여 커널은 운영체제가 차지</li>
</ul>
<h3 id="✅-2-cpu-스케줄링">✅ 2. CPU 스케줄링</h3>
<ul>
<li><strong>CPU의 사용 순서와 사용 시간</strong>을 조절</li>
<li>동시에 여러 프로그램이 실행되는 멀티태스킹 환경을 효율적으로 지원</li>
</ul>
<h3 id="✅-3-시스템-규칙-제공">✅ 3. 시스템 규칙 제공</h3>
<ul>
<li>응용 프로그램들이 지켜야 할 규칙(인터페이스, API 등)을 정의</li>
<li>시스템 자원의 충돌을 방지하고, 전체 시스템의 안정성을 유지</li>
</ul>
<hr>
<h2 id="🚀-운영체제는-왜-중요한가">🚀 운영체제는 왜 중요한가?</h2>
<p>우리가 만드는 모든 프로그램은 결국 <strong>하드웨어 위에서 실행</strong>된다.<br>그리고 하드웨어를 직접 다루는 프로그램이 바로 운영체제다.</p>
<p>운영체제는 인간보다 하드웨어를 먼저, 더 깊이 이해하고 있다.<br>따라서 우리가 만든 프로그램에서 발생하는 문제는 운영체제와의 <strong>인터랙션</strong>을 이해함으로써 해결의 실마리를 찾을 수 있다.</p>
<blockquote>
<p>운영체제를 이해한다는 것은, 단순히 시스템을 아는 것을 넘어 <strong>문제 해결 능력을 갖추는 핵심적인 기반</strong>이 된다.</p>
</blockquote>
<hr>
<h2 id="📌-마무리">📌 마무리</h2>
<p>운영체제는 단순한 배경 프로그램이 아니라,<br><strong>시스템 전체를 설계하고 통제하는 핵심 관리자</strong>다.<br>개발자라면 반드시 깊이 있게 이해하고 있어야 할 기술 기반이다.</p>
]]></description>
        </item>
    </channel>
</rss>