<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hayeon_dev.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sat, 06 Feb 2021 06:22:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hayeon_dev.log</title>
            <url>https://images.velog.io/images/hayeon_dev/profile/e1795e92-ed2b-48ff-b723-67ca861c5f13/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hayeon_dev.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hayeon_dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Lecture 3. Process Management]]></title>
            <link>https://velog.io/@hayeon_dev/Lecture-3.-Process-Management</link>
            <guid>https://velog.io/@hayeon_dev/Lecture-3.-Process-Management</guid>
            <pubDate>Sat, 06 Feb 2021 06:22:06 GMT</pubDate>
            <description><![CDATA[<h1 id="1-프로세스의-정의-및-종류">1. 프로세스의 정의 및 종류</h1>
<blockquote>
<ul>
<li>job vs process</li>
</ul>
</blockquote>
<ul>
<li>job : 우리가 작성한 프로그램과 데이터를 묶어놓은 것이다. </li>
<li>process :** <U>job 실행을 시스템(커널)에 등록된 작업</U>**을 말함. 
<img src="https://images.velog.io/images/hayeon_dev/post/bdee962e-bc0c-4585-a66d-ca9e7b536bfd/image.png" alt=""></li>
</ul>
<p><strong>실행중인 프로그램</strong>. 
즉 커널에 등록되고 커널 관리하에 있는 작업이다. 
자원들을 요청하고 할당 받을 수 있음</p>
<p>종류는 아래와 같다.</p>
<p><img src="https://images.velog.io/images/hayeon_dev/post/25bdfcf3-3f9b-4751-8da6-e84a7df938cf/image.png" alt=""></p>
<p>(여담). 자원의 개념 </p>
<p>커널 관리 하에 프로세스에게 할당 및 반납되는 수동적 개체 (passive entity)</p>
<p> <img src="https://images.velog.io/images/hayeon_dev/post/a76e32c2-adfb-42ff-8e3b-1c413c489bea/image.png" alt=""></p>
<h1 id="2-pcb-process-control-block">2. PCB (Process Control Block)</h1>
<p>os가 프로세스 관리에 필요한 정보를 저장하는 곳. </p>
<p><img src="https://images.velog.io/images/hayeon_dev/post/235fbdc1-6d68-407a-a001-7b4f947941e4/image.png" alt=""></p>
<p>이게 관리하는 정보</p>
<p><img src="https://images.velog.io/images/hayeon_dev/post/a44e3c63-abc1-4195-a2ed-7f91bde1a29a/image.png" alt=""></p>
<p>! PCB 정보는 os별로 서로 다를 수 있다.</p>
<h1 id="3-프로세스의-상태-변화">3. 프로세스의 상태 변화</h1>
<p>자원 간의 상호작용에 의해 결정된다.
<img src="https://images.velog.io/images/hayeon_dev/post/7814f912-5253-47d3-8442-38028c53f016/image.png" alt=""></p>
<ul>
<li><p>created state
작업을 커널에 등록한 상태. PCB 할당 및 프로세스 생성. read 혹은 suspended ready 상태 중 하나로 넘어가게 됨. 쓸 수 있는 메모리 공간 여부에 따라 갈린다. 있는 경우에는 ready 상태가 됨</p>
</li>
<li><p>ready state
프로세서(CPU) 외에 다른 모든 자원을 할당 받은 상태
running 상태로 넘어가는데</p>
</li>
<li><p>running state
프로세서와 자원을 모두 할당 받은 상태. running 에서 ready 상태 혹은 asleep 상태로 내려감 
running 상태에서 I/O request가 발생하면 asleep상태에 빠지게 된다. I/O 작업을 하는 동안 메모리에서 자고 있다고 생각하면 된다. </p>
</li>
</ul>
<p><img src="https://images.velog.io/images/hayeon_dev/post/31fda1ad-35f7-4920-80c7-af19950ecb78/image.png" alt=""></p>
<ul>
<li><p>Blocked/Asleep stae
프로세서 외에 다른 자원을 기다리는 상태로 wake-up을 통해 ready state로 전환이 가능하다. </p>
</li>
<li><p>suspended state (지연 상태)
메모리를 할당 받지 못하거나 빼앗긴 상태를 의미한다. 
swap-out 또는 swap-in 과정을 거친다.
<img src="https://images.velog.io/images/hayeon_dev/post/82fa9882-da1c-4fd5-acfb-7ea822623883/image.png" alt=""></p>
</li>
<li><p>terminated/ zombie state
프로세스 수행이 끝나 모든 자원이 반납되어 커널 내에 pcb 정보만 남아있는 상태 </p>
</li>
</ul>
<p><img src="https://images.velog.io/images/hayeon_dev/post/c10ac10f-9a61-4cff-99ce-f80ea8b7b9d5/image.png" alt=""></p>
<blockquote>
<p>Note&gt;! 프로세스 관리를 위한 자료구조</p>
</blockquote>
<p><img src="https://images.velog.io/images/hayeon_dev/post/4e0d4ce9-7e9c-4453-8879-ecd853ac3d53/image.png" alt=""></p>
<ul>
<li>Ready Queue</li>
<li>I/O Queue</li>
<li>Device Queue</li>
</ul>
<h1 id="4-인터럽트">4. 인터럽트</h1>
<h1 id="4-1-인터럽트-처리과정">4-1. 인터럽트 처리과정</h1>
<h1 id="5-context-switching">5. Context Switching</h1>
<h1 id="5-1-context-switching-overhead">5-1. Context Switching Overhead</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[Lecture 2. OS Overview]]></title>
            <link>https://velog.io/@hayeon_dev/Lecture-2.-OS-Overview</link>
            <guid>https://velog.io/@hayeon_dev/Lecture-2.-OS-Overview</guid>
            <pubDate>Thu, 04 Feb 2021 11:01:51 GMT</pubDate>
            <description><![CDATA[<h1 id="1-운영체제-역할">1. 운영체제 역할</h1>
<h1 id="2-컴퓨터-시스템의-구성">2. 컴퓨터 시스템의 구성</h1>
<h1 id="3-운영체제의-구분">3. 운영체제의 구분</h1>
<h2 id="31-동시-사용자-수">3.1 동시 사용자 수</h2>
<h2 id="32-동시-실행-프로세스-수">3.2 동시 실행 프로세스 수</h2>
<h2 id="33-작업-수행-방식">3.3 작업 수행 방식</h2>
<ul>
<li><p>순차 처리
  운영체제가 존재하지 않기에 하드웨어를 사용자가 직접 관리해야 했었음. 실행하는 작업 별로 순차 처리가 이루어지기에 각각의 작업에 대한 준비 시간이 소요된다. </p>
</br></li>
<li><p>Batch System
  작업들을 모아놓았다가 한번에 처리하는 방법. 시스템은 중앙에서 관리 및 운영하였다. 시스템 지향적, 즉 시스템을 효율적을 이용할 수 있다는 특징이 있다. 많은 사용자가 시스템 자원을 공유할 수 있지만 같은 유형의 작업들이 모이기를 기다려야 한다는 점에서 생산성이 저하된다는 단점이 있다.</p>
</br></li>
<li><p>Time sharing system (시분할 시스템)
<img src="https://images.velog.io/images/hayeon_dev/post/7f588305-01e7-4ace-b1f6-371e7c201cc5/image.png" alt="">
  실행 시간을 나눈 시스템. 여러 사용자가 자원을 동시에 사용할 수 있다. 이때 파일 시스템 및 가상 메모리 관리가 등장하였다. 응답 시간이 단축되어 생산성이 향상되지만 통신 비용이 증가함과 시스템 부하에 따른 개인 사용자의 체감 속도 저하가 발생한다.</p>
</br></li>
<li><p>Personal Computing
  개인이 시스템 전체를 독점한다는, 이전과 비교하여 가장 큰 차이점을 갖는다. CPU 사용율을 고려할 필요없다는 편리함과 빠른 응답시간을 갖지만 성능이 낮다는 단점이 있다.</p>
</br></li>
<li><p>Parallel processing system
<img src="https://images.velog.io/images/hayeon_dev/post/fb22593a-64d9-4aef-b515-ce3ae20f5b40/image.png" alt="">
  병렬처리. 단일 시스템 내부에서 둘 이상의 프로세서를 사용하는 방법. 기억장치와 주변장치가 시스템 버스를 통해 여러 프로세서를 공유한다. cpu 하나가 고장난다 하여도 다른 것을 통해 동작이 가능하다 == 신뢰성 향상. </p>
</br></li>
<li><p>distributed processing system
<img src="https://images.velog.io/images/hayeon_dev/post/63020621-045f-461e-a4c4-8a9463416316/image.png" alt="">
  컴퓨터를 여럿 연결하는 방법. 네트워크를 사용한다. 분산처리 시스템. 슈퍼컴퓨터 및 클라우드 컴퓨터를 예로 들 수 있다. 높은 성능과 고 신뢰성의 장점이 있지만 구축 및 관리가 어렵다. </p>
</br></li>
<li><p>Real-time system
실시간 시스템. 작업 처리에 제한 시간이 주어진 시스템이다. 예를 들어 발전소 시스템을 예로 들어보자. 시간별 온도를 감지한다고 했을 때 이는 real-time sys라고 할 수 있다.  </p>
<h1 id="4-운영체제의-구조">4. 운영체제의 구조</h1>
</li>
<li><p>커널
  os의 핵심 부분으로 영문으로는 알맹이 라는 의미를 갖는다. 가장 빈번하게 사용되는 기능, 예를 들어 프로세서와 메모리 관리를 한다. </p>
</li>
<li><p>유틸리티
운영 체제를 제외한 부분. UI등 서비스 프로그램과 비상주 프로그램으로 필요한 순간에 메모리에 올려 실행된다. </p>
</li>
<li><p>시스템 콜 : 커널에게 무언가를 요청하는 통로
<img src="https://images.velog.io/images/hayeon_dev/post/dc503341-9932-409d-83ec-5d62d8e071a7/image.png" alt=""></p>
</li>
</ul>
<h2 id="41-단일-구조">4.1 단일 구조</h2>
<p><img src="https://images.velog.io/images/hayeon_dev/post/fa966373-7370-41d4-9a72-ea87cad497b1/image.png" alt="">
 커널 내부에 모든 모듈을 탑재. 이들 사이에 직접적인 통신이 가능하기에 효율적 자원 관리가 가능하다는 장점이 있다. 하지만 기능이 추가될수록 오류 및 버그, 추가 기능 구현 등 유지보수가 어렵다는 단점이 있다. 또한 한 모듈의 문제가 전체 시스템에 영향을 줄 수 있다. (예, 악성코드)</p>
<h2 id="42-계층-구조">4.2 계층 구조</h2>
<p> <img src="https://images.velog.io/images/hayeon_dev/post/0e06f527-2ef8-4ef5-9053-8e98477eca1d/image.png" alt="">
 커널 영역을 계층 별로 나누어 설계와 구현을 단순화 한다. 그러나 기능 수행을 위해 여러 계층을 거쳐야 하기에 성능이 저하된다는 단점이 있다.</p>
<h2 id="43-마이크로-커널-구조">4.3 마이크로 커널 구조</h2>
<p> <img src="https://images.velog.io/images/hayeon_dev/post/659783b7-b21d-486d-ace1-59164d1bae7e/image.png" alt="">
 커널에 필수 기능만 담는 구조. 메모리 관리, 프로세스 통신 및 관리처럼 필수적인 요소만 커널에 탑재하는 방법.</p>
<h1 id="5-운영체제의-기능">5. 운영체제의 기능</h1>
<h2 id="51-process-management">5.1 Process Management</h2>
<ul>
<li>process
  커널에 등록된 실행 단위, 사용자 요청/프로그램의 수행 주체</li>
</ul>
  </br>
   os는 프로세스의 생성/삭제, 상태관리, 자원할당, 
   </br>
   프로세스 간 통신 및 동기화(synchronization), 교착상태 해결 
   </br>
   그리고 프로세스 정보 관리를 수행한다.

<h2 id="52-processor-management-cpu라고-생각해도-ㄱㅊ">5.2 Processor Management (cpu라고 생각해도 ㄱㅊ)</h2>
<ul>
<li>cpu 할당. process scheduling 이라고 한다.</li>
</ul>
<h2 id="53-memory-management">5.3 Memory Management</h2>
<ul>
<li>주기억 장치 관리가 주 역할이다. 
메모리를 할당 및 회수, 여유 공간 관리 
그리고 프로세스의 할당 메모리 영역 접근 보호를 담당한다. </li>
</ul>
<h2 id="54-file-management">5.4 File Management</h2>
<h2 id="55-io-management">5.5 I/O Management</h2>
<p><img src="https://images.velog.io/images/hayeon_dev/post/0992d2da-479f-45bc-a93b-aa7b405749e8/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Lecture 1. Computer System Overview]]></title>
            <link>https://velog.io/@hayeon_dev/Lecture-1.-Computer-System-Overview</link>
            <guid>https://velog.io/@hayeon_dev/Lecture-1.-Computer-System-Overview</guid>
            <pubDate>Tue, 02 Feb 2021 07:24:44 GMT</pubDate>
            <description><![CDATA[<h1 id="triger">triger</h1>
<p> 컴퓨터는 어떤 원리로 동작하는가 항상 궁금해왔던 나로써 이 과목은 유능한 개발자를 꿈꾸는 사람에게 필수요소라는 생각이 들었다. 해서 유튜브에 올라온 운영체제강좌를 통해 공부한 내용을 벨로그에 정리할 계획이다.</p>
<h1 id="운영체제-겉핥기">운영체제 겉핥기</h1>
<p><img src="https://images.velog.io/images/hayeon_dev/post/c434575e-9d20-4871-9187-4f0f7927f3af/image.png" alt=""></p>
<p>중재자. 이정도면 짧고도 강력한 설명이 될 수 있다. 하드웨어와 사용자 간의 간결한 인터페이스가 구축된다는 것은 이상적이다. 프로그램 실행시 할당되는 메모리 저장 및 처리 프로세스가 복잡하기 때문이다. </p>
<p>뿐만아니라 운영체제를 도입함으로써 프로그램 최대 성능을 이끌어내고 관리할 수 있다는 이점이 있기에 운영체제는 컴퓨터 공학에서 정수라고 꼽을 수 있다.</p>
<h1 id="컴퓨터의-구성요소">컴퓨터의 구성요소</h1>
<h2 id="1-프로세서">1. 프로세서</h2>
<p>중앙처리장치, 즉 컴퓨터의 두뇌역할을 하여 
다음과 같은 역할을 한다.</p>
<ul>
<li>연산</li>
<li>모든 장치의 동작 제어<blockquote>
<p>Note!&gt;
컴퓨터의 여러 구성요소를 두루 묶어 프로세서라고 하는 것이다. 즉,
프로세서 == 레지스터 + 연산장치 + 제어장치
레지스터와 연산자잋는 데이터 부분, 제어장치는 제어 부분이다.
프로세서는 두루 묶여 시스템 버스를 통해 메모리, 주변장치와의 인터페이스를 구성한다. </p>
</blockquote>
</li>
</ul>
<h3 id="11-운영체제와의-관계">1.1 운영체제와의 관계</h3>
<p>운영체제는 프로세서에게 처리할 작업을 할당하고 관리한다.
프로그램의 프로세서 사용을 제어한다. </p>
<ul>
<li>프로그램의 프로세서 사용시간 관리</li>
<li>복수 프로그램간 사용시간 죠율<h3 id="12-레지스터">1.2 레지스터</h3>
프로세서 내부의 메모리로 데이터를 저장하는 역할을 한다.
용도, 사용자가 정보 변경 가능한지 여부, 정보의 종류에 따라 갈래가 나뉜다.</li>
<li>DR (Data Reigster) : 연산에 필요한 데이터, 플래그 값 저장</li>
<li>AR (Address Reigster) : 주소의 일부분을 저장</li>
<li>PC (Program Counter) : 다음 명령어의 주소를 보관</li>
<li>IR (Instruction Register) : 현재 실행하는 명령어를 보관</li>
<li>ACC (ACCumulator) :  데이터를 일시적으로 저장</li>
<li>MAR (Memory Address) : 프로세서가 참조하려는 데이터의 주소를 명시 </li>
<li>MBR (Memory Buffer) : 프로세서가 메모리에서 읽거나 저장할 데이터 자체를 보관</li>
</ul>
<h2 id="2-메모리">2. 메모리</h2>
<p>운영체제는 메모리 할당 및 관리를 한다. CPU와 Disk 사이의 속도차이를 해결하고자 등장했다.
메모리는 주기억장치, 보조기억장치로 구성된다.</p>
<h3 id="21-캐시">2.1 캐시</h3>
<p>CPUs와 </p>
<ul>
<li>메모리의 종류 중 하나로, 프로세서 내부의 메모리다. (L1, L2 캐시 등)</li>
<li>메인 메모리의 입출력 병목현상을 해소한다. </li>
</ul>
<blockquote>
<p>병목현상이란?
병목 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다. &quot;병목&quot;이라는 용어는 물이 병 밖으로 빠져나갈 때 병의 몸통보다 병의 목부분의 내부 지름이 좁아서 물이 상대적으로 천천히 쏟아지는 것에 비유한 것이다</p>
</blockquote>
<p><img src="https://images.velog.io/images/hayeon_dev/post/5047b173-7ff1-47fa-a40b-5fe3991c68d8/image.png" alt=""></p>
<p>아래는 캐시의 지역성이다. 
<img src="https://images.velog.io/images/hayeon_dev/post/e607a0b3-b523-41dc-b4e9-52211f48a9c7/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/hayeon_dev/post/1b1be48b-84da-4d17-99a4-b3658d84f792/image.png" alt=""></p>
<h2 id="3-시스템-버스">3. 시스템 버스</h2>
<p>Bus. 우리가 생각하는 대중교통 버스의 의미에 착안한 것이 맞다. 
시스템 버스의 경우 하드웨어들이 데이터 및 신호를 주고 받는 물리적인 통로이다.</p>
<ul>
<li>데이터 버스</li>
<li>주소 버스</li>
<li>제어 버스</li>
</ul>
<p><img src="https://images.velog.io/images/hayeon_dev/post/5ccdd36d-c776-4640-9b25-3af61753be61/image.png" alt=""></p>
<h2 id="4-주변장치">4. 주변장치</h2>
<p>프로세서와 메모리를 제외한 하드웨어를 말한다. (초간단)</p>
]]></description>
        </item>
    </channel>
</rss>