<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>여행다니는 펭귄</title>
    <link>https://penguintravler.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 16 Apr 2026 08:50:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>핑구힝구</managingEditor>
    <item>
      <title>영어로 과학 학술논문 쓰는법 1편 - 간단히 요약하기</title>
      <link>https://penguintravler.tistory.com/55</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;영어로 과학 논문을 쓰는것은 생각보다 귀찮은 일입니다. 학술적이면서 알아듣기 쉬워야하는 문체부터 따지는 것이 매우 많죠. 이 복잡한 문제를 차근차근 풀어봅시다. 한국어인 학술논문에도 포함되는 것이니 전 한국어로 논문 쓸건데요? 하시는 분도 봐주시면 감사하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 토픽을 분류하라&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫번째 알아봐야 할 것은 어떤 Field에 내 연구가 속하느냐는 것입니다. 단순히 Biology와 같이 큰 대분류부터 시작하는 것이죠. 이 대분류를 아는것은 내가 이 논문을 어디에 투고해야 할지도 영향을 미치기 때문에 정확하게 아셔야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;필자의 친구의 경우 IEEE에 게제할 내용을 이거 Computer Science 아님? 난 컴공과지 전자과가 아닌데? 몰?루하였다가 교수님께 한 소리를 들은 바가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두번째 확인해야할것은 어떤 Specific Field에 내 연구가 들어가 있느냐는 것이죠. 생물학만 해도 분자생물학인지 구조생물학인지 정보생물학인지 세부 분과가 아주 다양하죠. 확인하셨으면 정식 영문 명칭도 찾아보시는 것을 추천드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;논문의 세부 분야를 분류하기 어려울 경우 지도교수님께 여쭤보는것을 추천드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이를 통해 토픽을 정확하게 분류하셨으면 다음 스텝으로 넘어가야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 연구에 참여한 저자의 명단을 적어라&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;연구를 혼자 하셨으면 그렇게 큰 문제는 아니겠지만, 지도교수님이 교신저자를 하였거나, 대학원 동료가 실험에 참가하였거나 하면 매우매우 복잡해집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실험을 사소하게 도와주신 분이더라도 아에 돈을 주고 외주를 맡긴게 아니라면, 기억하여 적어놓는 편이 좋습니다. 추후 연구윤리와 관련된 문제가 생길 가능성이 큽니다. 고로 적어두고 적절히 분류하여 저자를 구분하는 것이 좋습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;또한 이에 해당되는 분들께 연락하여 해당 사실을 알리는 것이 좋습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. 연구를 몇 문장 이내로 요약하라&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;어떤 연구 방법을 사용하였는지, 무엇이 사용되었는지를 간단하게 요약해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;즉 연구를 위해서 뭘 했는지를 (노력 이런거 말고) 아카데믹하게 요약하는 겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;연구 그 자체의 내용도 중요하지만, 논문에서 제일 중요한것은 어떤 연구방법을 사용하여서 결과를 내었는지 입니다. 슬프게도 결과 자체가 너무나 중요한 논문을 쓸 가능성은 별로 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4. 연구 데이터가 뭔지, 무엇을 얻었는지 정리하라&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;연구 데이터는 까먹지 않고 전부 정리하여 리스트 해 두는것이 좋습니다. 매우 필수적인 것이라서 잊지 말아야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5. 이 연구가 중요한 이유를 한줄요약하라&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;예시 구문으로는 이 셋중 하나를 선택하는것이 좋습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;It can increase our understanding of ~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;It can be used to ~ better ~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;It confirms our understanding of ~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 이외의 구문을 쓰셔도 상관없지만 영어 초보시라면 이 세마디 정도면 대부분의 요약 가능하실테니 외워두시는 것을 추천합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6. Reference들을 정리하라&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Reference들은 전부 APA Style로 정리되어 있어야 합니다. 여러분들 중에는 대충 레퍼런스 달때 한국 논문 다시는 분들 많은데 영어 논문을 쓰실거라면 레퍼런스도 영문으로 되어 있는것을 다시는 것을 추천합니다. 귀찮더라도 찾아보시고 다셔야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;APA Style일로 간단하게 논문을 표시해 주는 사이트 링크입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://owl.purdue.edu/owl/research_and_citation/apa_style/apa_style_introduction.html&quot;&gt;APA Style Introduction // Purdue Writing Lab&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647308889355&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;APA Style Introduction // Purdue Writing Lab&quot; data-og-description=&quot;The Purdue University Online Writing Lab serves writers from around the world and the Purdue University Writing Lab helps writers on Purdue's campus.&quot; data-og-host=&quot;owl.purdue.edu&quot; data-og-source-url=&quot;https://owl.purdue.edu/owl/research_and_citation/apa_style/apa_style_introduction.html&quot; data-og-url=&quot;https://owl.purdue.edu/owl/research_and_citation/apa_style/apa_style_introduction.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nnzmI/hyNH6xsOrK/kjYKOFRPmFFm1I3NYlnFqk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://owl.purdue.edu/owl/research_and_citation/apa_style/apa_style_introduction.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://owl.purdue.edu/owl/research_and_citation/apa_style/apa_style_introduction.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nnzmI/hyNH6xsOrK/kjYKOFRPmFFm1I3NYlnFqk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;APA Style Introduction // Purdue Writing Lab&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Purdue University Online Writing Lab serves writers from around the world and the Purdue University Writing Lab helps writers on Purdue's campus.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;owl.purdue.edu&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이를 통해 Reference를 변환하고, 이 Reference를 사용하는 이유를 간단하게 요약해 주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;APA Style 표기에 대해서는 저자가 불분명한것, 웹사이트인 것 등등 여러 케이스와 함께 별도의 글로 소개해 드리겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6단계에 따라 이를 요약하셨으면 논문의 첫 단계인 가장 기초적인 요약이 완성된 셈입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>영어논문</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/55</guid>
      <comments>https://penguintravler.tistory.com/55#entry55comment</comments>
      <pubDate>Tue, 15 Mar 2022 10:49:35 +0900</pubDate>
    </item>
    <item>
      <title>파일 시스템과 DMBS</title>
      <link>https://penguintravler.tistory.com/54</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;파일 시스템과 그 문제점은 무엇일까요?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파일 시스템의 경우 응용 프로그래머가 파일 시스템, 즉 자료구조에 대해 알고 있어야 데이터에 대한 접근을 구현 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 경우 문제가 생기는 것을 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 종속성&lt;/span&gt;&lt;/b&gt;과 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 중복성&lt;/span&gt;&lt;/b&gt;이라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 데이터의 저장 방법이나 접근 방법이 변경 될 경우 응용프로그래머는 이를 알고 다시 응용 프로그램을 수정해 주어야 합니다. ( 데이터 종속성 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터가 한 시스템 내에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;중복&lt;/b&gt;&lt;/span&gt;되어 저장되기도 합니다. RAID구조와 같은 것이 이렇습니다. ( 데이터 중복성 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 중복성은 한 데이터가 수정되었을때 서로 불일치하면 데이터의 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;일관성&lt;/b&gt;&lt;/span&gt;이 없어지며 모순이 발생하는 문제, 동일 수준의 보안 유지가 어려워&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 보안성&lt;/b&gt;&lt;/span&gt;이 낮아지는 문제, 하드웨어를 비효율적으로 사용하게 되어&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 경제성&lt;/span&gt;&lt;/b&gt;이 낮아지는 문제, 모든 데이터의 제어가 어렵기 때문에 정확성을 유지할 수 없는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;무결성&lt;/b&gt;&lt;/span&gt;의 문제가 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다만, 단점만 있는 것은 아니고 데이터 중복성은 이점도 존재합니다. Read 연산(트랜잭션) 이 매우 빠르다는 것이고, 파일 시스템에 따라 데이터를 옮길 일이 생길 수도 있는데 이것이 최소화되며, 그 구역이 고장났을경우 복구하기가 쉽습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터베이스란 무엇일까요?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;파일 시스템에는 이점도 있으나 단점때문에 큰 데이터(서버 등)을 관리하기 어려워서 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터베이스&lt;/span&gt;&lt;/b&gt;라는 자료구조를 사용하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스는 당연히 컴퓨터가 접근 가능한 하드웨어 데이터 집합을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이는 기본적으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;통합된 데이터&lt;/b&gt;&lt;/span&gt;를 사용합니다. 통합된 데이터는 이론적으로는 중복이 없지만, 효율성 때문에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;최소 데이터&lt;/b&gt;&lt;/span&gt;를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;통제된 상태&lt;/b&gt;&lt;/span&gt;로 중복하는 것을 허가합니다.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 내에는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;운영 데이터&lt;/b&gt;&lt;/span&gt; 역시 존재하는데 이는 Kernel과 같이 시스템 작동에 핵심적인 데이터를 의미합니다. I/O데이터, 임시 데이터 등은 이에 포함되지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한 데이터베이스는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;공용 데이터&lt;/b&gt;&lt;/span&gt;를 지원합니다. 여러 User가 한 곳에 저장된 데이터를 공동 소유하고 유지할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스는 또한 다음과 같은 기능을 제공해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;임의적이고 비정형인&lt;/u&gt; 질의에 대해서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;실시간 처리&lt;/b&gt;&lt;/span&gt;로 응답해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;삽입, 삭제, 갱신&lt;/u&gt;을 하면서도 현재 데이터 구조와 데이터베이스 시스템을 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;안정적&lt;/b&gt;&lt;/span&gt;으로 유지해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여러 유저가 공용 데이터에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;동시 접근&lt;/b&gt; &lt;/span&gt;가능해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;포인터를 기억할 필요 없이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;데이터값만&lt;/b&gt;&lt;/span&gt; 가지고도 참조 가능해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스는 다음과 같은 특징 3가지를 가집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;복잡한 자료를&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 추상화&lt;/b&gt;&lt;/span&gt;하여 보관해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로그램과 자료구조가&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 독립&lt;/b&gt;&lt;/span&gt;되어 있어야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스가 알아서 자료의 구성과 내용을 관리하고 기억해야합니다. 이는&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; metadata&lt;/b&gt;&lt;/span&gt;로 DMBS 카탈로그에 저장됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제일 간단한 데이터베이스를 그림으로 나타내 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TUd2B/btro7hdXDWo/m3mtATcwZkxBr4ltyHm381/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TUd2B/btro7hdXDWo/m3mtATcwZkxBr4ltyHm381/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TUd2B/btro7hdXDWo/m3mtATcwZkxBr4ltyHm381/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTUd2B%2Fbtro7hdXDWo%2Fm3mtATcwZkxBr4ltyHm381%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;157&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;개체&lt;/b&gt;&lt;/span&gt;는 즉 사람입니다. 사람을 속성으로 구분하여 보관하게 되고 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;속성&lt;/b&gt;&lt;/span&gt;은 데이터의 가장 작은 논리적 단위이자, 단독 존재하는 것이 불가능한 데이터입니다. 이 속성이 가질 수 있는 값을 모아놓은것이 바로 도메인입니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;관계&lt;/b&gt;&lt;/span&gt;는 개체 집합 즉 {김똥깨(), 정방식(), 손철수()}와 같은 개체 집합 내의 관계나 개체 집합 끼리의 관계 등 여러 관계가 존재합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;데이터베이스 관리 시스템 (DMBS)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 사용을 위해서는 DMBS가 필요합니다. 이는 응용 프로그램이 데이터베이스를 쉽게 사용하게 도우며, 데이터베이스를 제어하거나, 접근 방법을 제시하거나, 관리하는 기능을 수행합니다. 이는 특히 파일 시스템의 데이터 종속성 문제를 해결하기 위해서 사용되며, DMBS에서는 응용은 파일 시스템을 사용하는것과는 달리&amp;nbsp; DMBS에 간단히 요청하는 방식으로 데이터에 접근이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DMBS의 필수적인 기능은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;응용과 데이터베이스가 서로 자료를 인터페이스 하기 위한 방법인 Key를 제공해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스를 사용자가 제어할 수 있도록 검색,갱신,삽입,삭제를 지원해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스 시스템이 무결성(정확성, 안정성)을 늘 유지할 수 있도록 제어해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;무결성, 보안, 권한 검사, 동시 제어, 데이터베이스 복구&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이와 같은 기능을 가진 데이터베이스의 장점과 단점은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdiyzb/btrpdpV3i4n/pLZs5Cf6ufTSJ3O0DK869K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdiyzb/btrpdpV3i4n/pLZs5Cf6ufTSJ3O0DK869K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdiyzb/btrpdpV3i4n/pLZs5Cf6ufTSJ3O0DK869K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdiyzb%2FbtrpdpV3i4n%2FpLZs5Cf6ufTSJ3O0DK869K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;333&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;DMBS의 구성&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DMBS구성은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;1078&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEJOLE/btrpiH24NyP/KEm2TTkv9yuqCerNA5oW50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEJOLE/btrpiH24NyP/KEm2TTkv9yuqCerNA5oW50/img.png&quot; data-alt=&quot;DMBS의 구성 요소&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEJOLE/btrpiH24NyP/KEm2TTkv9yuqCerNA5oW50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEJOLE%2FbtrpiH24NyP%2FKEm2TTkv9yuqCerNA5oW50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1279&quot; height=&quot;1078&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;1078&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DMBS의 구성 요소&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DDL이란 Data Definition Language로 데이터 정의어를 의미합니다. 즉 데이터 생성 수정 삭제에 대한 스킴을 정의합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;DML은 Data Manipulation Language로 데이터의 Search Insert Delete Update등에 대해 통제하는 언어입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;질의어는 DQL으로 Data Query Langauge로 데이터 검색을 지원합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DDL 컴파일러&lt;/b&gt;&lt;/span&gt;는 DDL로 작성된 스킴을 처리하여 카탈로그 데이터 사전에 저장합니다. 이는 런타임 데이터베이스 처리기를 호출하지 않고 즉시 저장 데이터 관리자를 호출합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;질의 처리기&lt;/b&gt;&lt;/span&gt;는 일반 사용자가 DQL로 질의를 하면 이 구문을 분석(파싱)한 뒤 컴파일하여 런타임 데이터베이스 처리기를 호출합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;좋은 질의 처리기는 질의를 정확한 의미로 변환하고, 효율적으로 변환해야합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DML 예비 컴파일러&lt;/b&gt;&lt;/span&gt;는 컴파일 하기 전에 응용 프로그램의 코드에서 DML들만 별도로 추출합니다. 나머지는 해당 언어의 컴파일러로 보냅니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DML 컴파일러&lt;/b&gt;&lt;/span&gt;는 DML을 컴파일하고 런타임 데이터베이스 처리기를 실행합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;런타임 데이터베이스 처리기&lt;/b&gt;&lt;/span&gt;는 컴파일된 코드들을 실행합니다. 이 명령들은 저장 데이터 관리자를 통해 디스크에 전달됩니다. 런타임 데이터베이스 처리기는 응용프로그램이 실행된 시간 내내 그 실행을 제어합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;트랜잭션 관리자&lt;/b&gt;&lt;/span&gt;와 병행하여 실행되며 데이터 접근중 보안(권한 체크) 데이터의 무결성 검사를 시행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/54</guid>
      <comments>https://penguintravler.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 17 Jan 2022 18:36:28 +0900</pubDate>
    </item>
    <item>
      <title>I/O 장비 정리</title>
      <link>https://penguintravler.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/39&quot;&gt;I/O Devices (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639537551389&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;I/O Devices&quot; data-og-description=&quot;I/O system은 컴퓨터 시스템에 매우 중요합니다. 입력을 받아야 출력도 하고, 프로그램도 실행할 수 있겠죠? 이 I/O system의 주요 세가지 이슈에 대해서 오늘 알아보도록 하겠습니다. I/O system이 어떻&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/39&quot; data-og-url=&quot;https://penguintravler.tistory.com/39&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/l4e6I/hyMH1jyyM0/ms5JUbYzaCU0G3scDhKLHk/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/cZ9Tax/hyMIcyABej/WkpAjkAu5W3ay8Wi6uaBQ1/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/bLf2YY/hyMH3VW1C5/VOx1L8GdD5cT9tRaKyRCw1/img.png?width=1872&amp;amp;height=928&amp;amp;face=0_0_1872_928&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/39&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/l4e6I/hyMH1jyyM0/ms5JUbYzaCU0G3scDhKLHk/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/cZ9Tax/hyMIcyABej/WkpAjkAu5W3ay8Wi6uaBQ1/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/bLf2YY/hyMH3VW1C5/VOx1L8GdD5cT9tRaKyRCw1/img.png?width=1872&amp;amp;height=928&amp;amp;face=0_0_1872_928');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;I/O Devices&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I/O system은 컴퓨터 시스템에 매우 중요합니다. 입력을 받아야 출력도 하고, 프로그램도 실행할 수 있겠죠? 이 I/O system의 주요 세가지 이슈에 대해서 오늘 알아보도록 하겠습니다. I/O system이 어떻&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) I/O는 Hierarchy 구조를 이룸 (Physics and Cost)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) System에 Integrate 시키는 방법 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Register사용 (Status, Command, Data)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Special I/O instruction 쓰기 아니면 Memory mapped I/O 쓰기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) I/O OS 관리법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Polling ( Simple 동작잘함, CPU낭비됨 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Interrupt 사용하기 ( CS 비쌈 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Poll, Interrupt는 나눠서 사용함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4) 고급 I/O 관리법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Copy data from memory하는 명령 하는거 시간 오래걸림&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Programmed I/O 대신 DMA Controller사용하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;873&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n0XUG/btrnU64NW4i/kHKQ2lCglQBvARD2T0rFO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n0XUG/btrnU64NW4i/kHKQ2lCglQBvARD2T0rFO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n0XUG/btrnU64NW4i/kHKQ2lCglQBvARD2T0rFO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn0XUG%2FbtrnU64NW4i%2FkHKQ2lCglQBvARD2T0rFO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;752&quot; height=&quot;516&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;873&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/40?category=973984&quot;&gt;HDD란? (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639538061596&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;HDD란?&quot; data-og-description=&quot;Hard Disk Drive Hard Disk Drives, Disk Scheduling, RAID Hard Disk Drive 하드 디스크는 실제로 디스크로 이루어져있고 이 디스크를 돌리면서 Arm으로 데이터를 읽는 구조입니다. 구체적인 구조를 한번 볼까요..&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/40?category=973984&quot; data-og-url=&quot;https://penguintravler.tistory.com/40&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUVn92/hyMIb7vYww/A80UoR4uKZVe5TOtklOkUk/img.png?width=221&amp;amp;height=50&amp;amp;face=0_0_221_50,https://scrap.kakaocdn.net/dn/EfIqw/hyMH6E91nN/LX0wh6k6i5IzyHweP47i71/img.png?width=221&amp;amp;height=50&amp;amp;face=0_0_221_50,https://scrap.kakaocdn.net/dn/5PcIk/hyMIck4VFb/L5edjwKmOrprjYhqgXdGC0/img.png?width=1624&amp;amp;height=592&amp;amp;face=0_0_1624_592&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/40?category=973984&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/40?category=973984&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUVn92/hyMIb7vYww/A80UoR4uKZVe5TOtklOkUk/img.png?width=221&amp;amp;height=50&amp;amp;face=0_0_221_50,https://scrap.kakaocdn.net/dn/EfIqw/hyMH6E91nN/LX0wh6k6i5IzyHweP47i71/img.png?width=221&amp;amp;height=50&amp;amp;face=0_0_221_50,https://scrap.kakaocdn.net/dn/5PcIk/hyMIck4VFb/L5edjwKmOrprjYhqgXdGC0/img.png?width=1624&amp;amp;height=592&amp;amp;face=0_0_1624_592');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;HDD란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hard Disk Drive Hard Disk Drives, Disk Scheduling, RAID Hard Disk Drive 하드 디스크는 실제로 디스크로 이루어져있고 이 디스크를 돌리면서 Arm으로 데이터를 읽는 구조입니다. 구체적인 구조를 한번 볼까요..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5) Disk Access Time = Seek Time + Rotational Latency + Transfer Time&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6) Logical Block Mapping&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;7) FCFS , SSTF, SCAN, CSCAN&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;8) &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;RAID 0 : Performance가 좋음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;RAID 1 : Low failure rate, Read 빠름 , Capacity가 안 좋음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;RAID 4:&amp;nbsp; n-1개 저장 블록이랑 parity Block하나.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;RAID 5: Parity 전용 block 없음 random performance가 더 좋음 Parity Disk 병목이 없음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;RAID 6: Parity 두개임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/41&quot;&gt;Flash-based SSD (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639538508241&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Flash-based SSD&quot; data-og-description=&quot;SSD란 뭘까요? Solid State Storage Drives는 mechanical(moving parts)한 부분이 없습니다. 그래서 HDD보다 응답시간이 빠르고, 작업을 처리하는 양도 더 많죠. 다만 DRAM과는 다르게 파워가 끊겨도 정보가 손실..&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/41&quot; data-og-url=&quot;https://penguintravler.tistory.com/41&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baN348/hyMH23O9WF/4mPgAXCZfizMx7r5fl2suK/img.png?width=800&amp;amp;height=316&amp;amp;face=236_211_264_242,https://scrap.kakaocdn.net/dn/cUsFvi/hyMIbsWDGP/CyhU8dG6aO2e7fTB0zoAyK/img.png?width=800&amp;amp;height=316&amp;amp;face=236_211_264_242,https://scrap.kakaocdn.net/dn/gwgUP/hyMH0SuvCJ/VYC12dRBC4mzxXx7x3Mknk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/41&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baN348/hyMH23O9WF/4mPgAXCZfizMx7r5fl2suK/img.png?width=800&amp;amp;height=316&amp;amp;face=236_211_264_242,https://scrap.kakaocdn.net/dn/cUsFvi/hyMIbsWDGP/CyhU8dG6aO2e7fTB0zoAyK/img.png?width=800&amp;amp;height=316&amp;amp;face=236_211_264_242,https://scrap.kakaocdn.net/dn/gwgUP/hyMH0SuvCJ/VYC12dRBC4mzxXx7x3Mknk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Flash-based SSD&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SSD란 뭘까요? Solid State Storage Drives는 mechanical(moving parts)한 부분이 없습니다. 그래서 HDD보다 응답시간이 빠르고, 작업을 처리하는 양도 더 많죠. 다만 DRAM과는 다르게 파워가 끊겨도 정보가 손실..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;9) Floating Gate Transistor, Nand Flash Memory&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;10) Cell -&amp;gt; Page(Read Write) -&amp;gt; Block(Erasure) -&amp;gt; flash die&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;11) Read &amp;gt; Write &amp;gt; Erasure&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;12) Multi Level Cell 2차원 3차원 적층&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;13) Flash Translation Layer ( Lowest Write amplication needed )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;14) Direct mapping (&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;mplication&lt;/b&gt;&lt;/span&gt; High)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;15) Log Structured FTL (Amplication Low)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- Garbage Collection needed&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- Need Mapping Table&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- Demand - based FTLs&amp;nbsp; Locality 사용하여 DRAM에 올리기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;16) Wear Leveling&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dynamic Wear Leveling, Static Wear Leveling&lt;/span&gt;&lt;/p&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/53</guid>
      <comments>https://penguintravler.tistory.com/53#entry53comment</comments>
      <pubDate>Wed, 15 Dec 2021 12:28:44 +0900</pubDate>
    </item>
    <item>
      <title>Memory Virtualization 정리</title>
      <link>https://penguintravler.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/35&quot;&gt;Virtual Memory and Adress Translation (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1639535266589&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Virtual Memory and Adress Translation&quot; data-og-description=&quot;1. Computer Data Storages 2. Memory Virtualization 3. Adress Translation 1. Computer Data Storages 우리가 예전에 살펴보았던 Memory는 Object Code, Program, Os data, Stack등을 포함한 Virtual한 Memory..&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/35&quot; data-og-url=&quot;https://penguintravler.tistory.com/35&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cYXwRY/hyMH2vV4Ux/PqKoXubkHUieQASZL4OAEK/img.png?width=800&amp;amp;height=229&amp;amp;face=0_0_800_229,https://scrap.kakaocdn.net/dn/cgiP8O/hyMIfhJIyW/huyl7casCvaw42E7inOGq0/img.png?width=800&amp;amp;height=229&amp;amp;face=0_0_800_229,https://scrap.kakaocdn.net/dn/LEOth/hyMH2vV4SF/zL44lTd647cGdWuh2a9ugK/img.png?width=1904&amp;amp;height=730&amp;amp;face=0_0_1904_730&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/35&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/35&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cYXwRY/hyMH2vV4Ux/PqKoXubkHUieQASZL4OAEK/img.png?width=800&amp;amp;height=229&amp;amp;face=0_0_800_229,https://scrap.kakaocdn.net/dn/cgiP8O/hyMIfhJIyW/huyl7casCvaw42E7inOGq0/img.png?width=800&amp;amp;height=229&amp;amp;face=0_0_800_229,https://scrap.kakaocdn.net/dn/LEOth/hyMH2vV4SF/zL44lTd647cGdWuh2a9ugK/img.png?width=1904&amp;amp;height=730&amp;amp;face=0_0_1904_730');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Virtual Memory and Adress Translation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Computer Data Storages 2. Memory Virtualization 3. Adress Translation 1. Computer Data Storages 우리가 예전에 살펴보았던 Memory는 Object Code, Program, Os data, Stack등을 포함한 Virtual한 Memory..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) 메모리의 종류와 Multi level cell Technique에 대한 간략한 소개&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) Memory Hierarchy가 동작가능한 이유 (Temporal Locality, Spatial Locality) (Data reference, Instruction Reference)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3) Memory Virtualization (Virtual Address Space + Addres Translation)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4) Benefits of Memory Virtualization (Efficiency, Protection, Ease of Programming)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5) Design Goal of Address Translation &lt;span style=&quot;color: #ee2323;&quot;&gt;(Transparency(unware of Address Translation), Protection, Flexibility)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6) Dynamic Relocation (메모리 낭비 어마어마함)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;7) Segmentation (Externel Fragmentation, Hard to Free space Manage, Compaction 비쌈)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/38&quot;&gt;Free Space Management (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639535805948&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Free Space Management&quot; data-og-description=&quot;우리는 그래서 남는 공간을 어떻게 관리해 주어야 할까요? Free space management는 variable sized unit이 포함되어 있어 매우 까다롭습니다. (segmentation 사용할 경우, heap allocation 사용할 경우 발생) 그..&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/38&quot; data-og-url=&quot;https://penguintravler.tistory.com/38&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgEc0p/hyMH05Yckl/ZbElgdF3uYKE8KrqpI8RwK/img.png?width=800&amp;amp;height=148&amp;amp;face=0_0_800_148,https://scrap.kakaocdn.net/dn/SxeBj/hyMIe4ednB/cBXmJZ7VxVksZrpvVokU80/img.png?width=800&amp;amp;height=148&amp;amp;face=0_0_800_148,https://scrap.kakaocdn.net/dn/iHBGJ/hyMH7YkhkF/GHRjtxGQfyTJvtVYEt4hU0/img.png?width=1283&amp;amp;height=238&amp;amp;face=0_0_1283_238&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/38&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgEc0p/hyMH05Yckl/ZbElgdF3uYKE8KrqpI8RwK/img.png?width=800&amp;amp;height=148&amp;amp;face=0_0_800_148,https://scrap.kakaocdn.net/dn/SxeBj/hyMIe4ednB/cBXmJZ7VxVksZrpvVokU80/img.png?width=800&amp;amp;height=148&amp;amp;face=0_0_800_148,https://scrap.kakaocdn.net/dn/iHBGJ/hyMH7YkhkF/GHRjtxGQfyTJvtVYEt4hU0/img.png?width=1283&amp;amp;height=238&amp;amp;face=0_0_1283_238');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Free Space Management&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;우리는 그래서 남는 공간을 어떻게 관리해 주어야 할까요? Free space management는 variable sized unit이 포함되어 있어 매우 까다롭습니다. (segmentation 사용할 경우, heap allocation 사용할 경우 발생) 그..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;8) Free Space Manage 기술 (Splitting, Coalescing) (header, magic number) (mmap, sbrk) (Best Fit, Next Fit, Worst Fit, First Fit)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/45&quot;&gt;Paging (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639536162687&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Paging&quot; data-og-description=&quot;저번에 Segmentation에 대해서 알아보았죠? 그런데 Segmentation에는 문제점이 많습니다. Externel fragmentation Free space management가 복잡하다는 점 Compaction이 비싸다는 점 또 Code구간 Stack구간 Heap구..&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/45&quot; data-og-url=&quot;https://penguintravler.tistory.com/45&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EQFO9/hyMIeJWz7i/XO0E8759fVwT9Eu2iIWGZK/img.png?width=800&amp;amp;height=680&amp;amp;face=0_0_800_680,https://scrap.kakaocdn.net/dn/b3ah6A/hyMH0ZdAHw/WaQFtkMgNuleHm58MjpjY1/img.png?width=800&amp;amp;height=680&amp;amp;face=0_0_800_680,https://scrap.kakaocdn.net/dn/rqF0y/hyMH1w2Eej/pVkSLNi8nbdijr0BVxqIM1/img.png?width=1926&amp;amp;height=1638&amp;amp;face=0_0_1926_1638&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/45&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/45&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EQFO9/hyMIeJWz7i/XO0E8759fVwT9Eu2iIWGZK/img.png?width=800&amp;amp;height=680&amp;amp;face=0_0_800_680,https://scrap.kakaocdn.net/dn/b3ah6A/hyMH0ZdAHw/WaQFtkMgNuleHm58MjpjY1/img.png?width=800&amp;amp;height=680&amp;amp;face=0_0_800_680,https://scrap.kakaocdn.net/dn/rqF0y/hyMH1w2Eej/pVkSLNi8nbdijr0BVxqIM1/img.png?width=1926&amp;amp;height=1638&amp;amp;face=0_0_1926_1638');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Paging&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;저번에 Segmentation에 대해서 알아보았죠? 그런데 Segmentation에는 문제점이 많습니다. Externel fragmentation Free space management가 복잡하다는 점 Compaction이 비싸다는 점 또 Code구간 Stack구간 Heap구..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;9) Paging&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점 : Flexible, Simple&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용하는 Bit : (Valid Bit, Protection Bit, Present Bit, Dirty Bit, Reference Bit)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Paging 단점 (Huge Page Table, Performance Degrade, Internel Fragmentation)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Huge Page Table -&amp;gt; Hybrid, multi level paging&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Performance Degrade -&amp;gt; TLB Cache&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/46&quot;&gt;Translation Lookaside Buffer (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639536559060&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Translation Lookaside Buffer&quot; data-og-description=&quot;TLB에 대한 내용은 저번에 Paging에 대한 글에서 살펴보았었죠? TLB는 full associative method를 통해 관리됩니다. 보통 TLB는 32,64,128개 정도의 Entry가 있는데, Hardware가 TLB에서 이 엔트리를 parallel하게..&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/46&quot; data-og-url=&quot;https://penguintravler.tistory.com/46&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dZkpk3/hyMH5Gdb5J/333dMZJMyhrIGqvg6z71fk/img.png?width=800&amp;amp;height=485&amp;amp;face=0_0_800_485,https://scrap.kakaocdn.net/dn/DsZQ2/hyMH3BC2OG/oHxa2DE3HfuK0mryWkGny0/img.png?width=800&amp;amp;height=485&amp;amp;face=0_0_800_485,https://scrap.kakaocdn.net/dn/c9egFc/hyMIf3aDf4/2VQaGD6XQl2AqKxcCmwKlk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/46&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/46&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dZkpk3/hyMH5Gdb5J/333dMZJMyhrIGqvg6z71fk/img.png?width=800&amp;amp;height=485&amp;amp;face=0_0_800_485,https://scrap.kakaocdn.net/dn/DsZQ2/hyMH3BC2OG/oHxa2DE3HfuK0mryWkGny0/img.png?width=800&amp;amp;height=485&amp;amp;face=0_0_800_485,https://scrap.kakaocdn.net/dn/c9egFc/hyMIf3aDf4/2VQaGD6XQl2AqKxcCmwKlk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Translation Lookaside Buffer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TLB에 대한 내용은 저번에 Paging에 대한 글에서 살펴보았었죠? TLB는 full associative method를 통해 관리됩니다. 보통 TLB는 32,64,128개 정도의 Entry가 있는데, Hardware가 TLB에서 이 엔트리를 parallel하게..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;10) TLB&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;full associative method&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Who manage ( Software, Hardware )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Flush vs ASID&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/48&quot;&gt;Paging with Smaller Tables (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639537049485&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Paging with Smaller Tables&quot; data-og-description=&quot;Page Table 은 굉장히 크기가 큽니다. 동작중인 프로세스를 전부 저장해야 하기때문에 그 부담이 더 크죠. 그렇다고 이렇게 Page Size를 늘이면 Page Table의 크기는 줄어들지만 Internel Fragmentation이 매우.&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/48&quot; data-og-url=&quot;https://penguintravler.tistory.com/48&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e4EAT/hyMIcyz7hb/nnnjay46ukJUgTKSbkTYsk/img.png?width=800&amp;amp;height=342&amp;amp;face=0_0_800_342,https://scrap.kakaocdn.net/dn/bxUz7Y/hyMIdqHVlY/GSyU8k8kxq7FqlonNgWSN1/img.png?width=800&amp;amp;height=342&amp;amp;face=0_0_800_342,https://scrap.kakaocdn.net/dn/Y3OdY/hyMIdRMXvL/CwLqYUpwYUxcfiDqxCg3yk/img.png?width=1764&amp;amp;height=1071&amp;amp;face=0_0_1764_1071&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/48&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e4EAT/hyMIcyz7hb/nnnjay46ukJUgTKSbkTYsk/img.png?width=800&amp;amp;height=342&amp;amp;face=0_0_800_342,https://scrap.kakaocdn.net/dn/bxUz7Y/hyMIdqHVlY/GSyU8k8kxq7FqlonNgWSN1/img.png?width=800&amp;amp;height=342&amp;amp;face=0_0_800_342,https://scrap.kakaocdn.net/dn/Y3OdY/hyMIdRMXvL/CwLqYUpwYUxcfiDqxCg3yk/img.png?width=1764&amp;amp;height=1071&amp;amp;face=0_0_1764_1071');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Paging with Smaller Tables&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Page Table 은 굉장히 크기가 큽니다. 동작중인 프로세스를 전부 저장해야 하기때문에 그 부담이 더 크죠. 그렇다고 이렇게 Page Size를 늘이면 Page Table의 크기는 줄어들지만 Internel Fragmentation이 매우.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;11) Hybrid Approach&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Segement의 단점을 공유함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;12) Multi Level Paging&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점: level of Indirection(Page다 따로따로 저장가능), DRAM에 올리기 쉬워짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점: Miss 나면 참조해야할게 아주 많음, 복잡함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;13)Inverted Page Table&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점: Page Table이 하나만 있으면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점: Hash Collision이 일어납니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해결법은 PFN을 PTE에 추가해주면 됩니다. 그러면 PTE로 PA를 바로 알수는 없는데, Sharing문제도 해결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/49&quot;&gt;Swapping and Page Replacement Policy (tistory.com)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1639539025479&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Swapping and Page Replacement Policy&quot; data-og-description=&quot;Operating System은 Virtual Space를 매우 크게 할당해 줍니다. 그것이 편리하고, 사용하기 쉽기 때문이죠. 그러니 저희는 Virtual Memory가 가득 차있을지, 아닐지 신경을 쓸 필요가 없는 것입니다. 그렇다면&quot; data-og-host=&quot;penguintravler.tistory.com&quot; data-og-source-url=&quot;https://penguintravler.tistory.com/49&quot; data-og-url=&quot;https://penguintravler.tistory.com/49&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjcc53/hyMH7RBcWD/IaZwbH4KFlmujoQOT6tk30/img.png?width=800&amp;amp;height=284&amp;amp;face=0_0_800_284,https://scrap.kakaocdn.net/dn/cKOg0W/hyMH4m2fhm/gzlABILVktWqvjBgCpoyN0/img.png?width=800&amp;amp;height=284&amp;amp;face=0_0_800_284,https://scrap.kakaocdn.net/dn/bf6cse/hyMH0LJRXr/Jc4BinC7k53n04vvKQZWj1/img.png?width=491&amp;amp;height=367&amp;amp;face=0_0_491_367&quot;&gt;&lt;a href=&quot;https://penguintravler.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://penguintravler.tistory.com/49&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjcc53/hyMH7RBcWD/IaZwbH4KFlmujoQOT6tk30/img.png?width=800&amp;amp;height=284&amp;amp;face=0_0_800_284,https://scrap.kakaocdn.net/dn/cKOg0W/hyMH4m2fhm/gzlABILVktWqvjBgCpoyN0/img.png?width=800&amp;amp;height=284&amp;amp;face=0_0_800_284,https://scrap.kakaocdn.net/dn/bf6cse/hyMH0LJRXr/Jc4BinC7k53n04vvKQZWj1/img.png?width=491&amp;amp;height=367&amp;amp;face=0_0_491_367');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Swapping and Page Replacement Policy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Operating System은 Virtual Space를 매우 크게 할당해 줍니다. 그것이 편리하고, 사용하기 쉽기 때문이죠. 그러니 저희는 Virtual Memory가 가득 차있을지, 아닐지 신경을 쓸 필요가 없는 것입니다. 그렇다면&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;penguintravler.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14) Swapping Swap in, Swap out&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15) Effective Accesstime Page fault가 어마어마한 영향 줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16) Page는 언제 비우나? (&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Swap Daemon&lt;/b&gt;&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17) FIFO(&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Belady's anomaly 벨리데이의 모순&lt;/b&gt;&lt;/span&gt;), RANDOM, LRU(&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Clockwork Algorithm&lt;/b&gt;&lt;/span&gt;), LFU&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18) Dirty Page (modified bit) - &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;pending write&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19) Demand or Prefetching&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20) &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Thrashing&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/52</guid>
      <comments>https://penguintravler.tistory.com/52#entry52comment</comments>
      <pubDate>Wed, 15 Dec 2021 12:03:41 +0900</pubDate>
    </item>
    <item>
      <title>FSCK and Journaling</title>
      <link>https://penguintravler.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;FSCK와 Journaling은 모두 Crash Consistency문제를 해결하기 위한 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Crash Consistency&lt;/b&gt;&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;문제란 뭘까요?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;많은 Data Structure과는 다르게, File system의 Data Structure은 무조건 안정되어야합니다.&lt;/li&gt;
&lt;li&gt;File System을 crash-consistency problem을 피하면서 안정시키는 것입니다.&lt;/li&gt;
&lt;li&gt;즉 그러니 쓰다가 전원이 나가거나 해도 File System이 보존되어야 하는것이죠.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Crash Consistency Problem이 어떻게 발생할지 어떤 경우에 발생할지 한번 볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희가 파일을 쓰게 되면 Data Bitmap, Inode, Data Block에 정보를 써 주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이것은 동시에 일어나는 동작이 아니라 Page Cache나 Buffer Cache에 저장되어 있다가 동작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니 file system이 inconsistent한 state에 자주 놓인다는 의미이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 여기서 Crash Scenario를 한번 보도록 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한개를 쓰다가 Crash가 날 경우
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Case 1a: Db만 썼을 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;inode도 없고 아무것도 없는 dummy data가 됩니다.&lt;/li&gt;
&lt;li&gt;한번도 쓰지 않았던 것과 같은 상태이기에, consistency의 문제가 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Case 1b: inode만 썼을 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;inode에 주소는 업데이트 했는데 거기에 있는 데이터는 garbage data가 됩니다. 고로 File system Incosistency가 일어납니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Case 1c: bitmap만 썼을 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Space leak이 일어납니다. 즉, point해 줄 inode가 없어 free도 되지 않고 access도 되지 않지만 그 누구도 data를 그곳에 쓸 수 없습니다. 고로 이 경우도 file system inconsistency 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;두개를 쓰다가 Crash가 날 경우
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Case 2a: inode와 bitmap만 썼을 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제가 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Case 2b: inode와 datablock만 썼을경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bitmap이 없기 때문에 언제던지 그 위치에 다른 file이 덮어써질 수 있습니다. 즉 Inconsistency가 발생합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Case 2c: bitmap과 datablock만 썼을 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bitmap만 쓴 경우와 같습니다. = case 1c.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 이런 문제가 일어날까요? file system을 atomically하게 작성하지 않기 때문입니다. 하지만 우리는 atomically하게 작성을 할 수 없죠. Disk가 한번에 한 번만 write하는 것을 허용하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이것을 해결하기 위해 fsck를 사용합니다. fsck는 언제 실행되냐면, file system이 Mount 될때 실행됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fsck는 file system checker로 모든 free block, inode , bitmap을 check합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Inode state
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 inode는 corruption 되어 있거나 다른 문제가 있는지 Check됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를들어 type Check 등이 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;만약 문제가 있으면 고치기 어렵기 때문에 그냥 suspect로 지정하여 clear시켜 줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Free blocks
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fsck가 inode를 scan하여 map된 block을 전부 조회하고 만약 bitmap과 inode와 consistency가 없을경우 고쳐줍니다. inode를 믿는 방향으로 고치기 때문에 Case 1c와 2b만 고칠 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Directory checks
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Directory는 특정한 file system에 의해 특정한 foramt으로 만들어집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fsck는 user file에 어떤 content를 집어 넣을지는 모릅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;고로 file system content와 directory간의 integerity check만 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어, Directory안에 .과 ..이 올바르게 들어가 있는지. 각 directory entry안에 있는 inode가 allocate되어 있는지.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, file system checker는 모든 문제를 고치는 만능 도구는 아닙니다. 예를 들어 case 2a의 경우 metadata는 일치하기 때문에 internally consistent 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fsck를 빌드하려면 파일 시스템에 대한 많은 지식이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 또, fsck는 크고 중요한 문제가 있습니다, 일단 너무 느리고 전체 디스크를 Scan하는것은 많은 minute과 hour를 필요로 합니다. 이 말은 fsck의 performance는 어마어마하게 비싸 Overhead를 심각하게 일으킨다는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 fsck 대신&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; J&lt;/b&gt;&lt;b&gt;ournaling (WAL: Write Ahead Logging)&lt;/b&gt;&lt;/span&gt;이라는 방법을 대신 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Structure를 쓰기전에 내가 무엇을 쓰는건지 알려주는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;little note&lt;/b&gt;&lt;/span&gt;를 먼저 씁니다.&lt;/li&gt;
&lt;li&gt;이 Note를 write하는 것은 &quot;write ahead&quot; part라고 부르고, structure를 쓰는건 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&quot;log&quot;&lt;/b&gt;&lt;/span&gt;라고 부릅니다.&lt;/li&gt;
&lt;li&gt;만약 crash가 발생하면 note로 돌아가서 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt;즉 무엇을 고칠지를 전체 데이터를 스캔하는것보다 훨씬 효율적으로 알 수 있다는 의미입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Journaling 은 Ext2에서는 지원되지 않고 Ext3에서는 Journaling을 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구체적으로는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Journal Write
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Journal즉 Log를 먼저 남깁니다. 이 Log에는 pending될 Data와 Txb, TIB가 포함됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Journal Commit
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Journal 을 write했으면 transaction commit block을 써서 제대로 써져있는지 확인시켜줍니다. (TxE)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Checkpoint
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 Transaction을 쓰는 Journal write이 끝나면 이제 Structure를 업데이트 해 줍니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Free
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Transaction을 free해 줍니다. (Journal Superblock을 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/51</guid>
      <comments>https://penguintravler.tistory.com/51#entry51comment</comments>
      <pubDate>Wed, 15 Dec 2021 06:14:13 +0900</pubDate>
    </item>
    <item>
      <title>Fast File System</title>
      <link>https://penguintravler.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그전에 File System Implementation에서 살펴보았던&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1599&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WJt1x/btrnJBiVbsH/KfWKpO3iIP63zX8mdlxCqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WJt1x/btrnJBiVbsH/KfWKpO3iIP63zX8mdlxCqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WJt1x/btrnJBiVbsH/KfWKpO3iIP63zX8mdlxCqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWJt1x%2FbtrnJBiVbsH%2FKfWKpO3iIP63zX8mdlxCqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;273&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1599&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;와 같은 구조는 간단하지만 매우 안 좋은 성능을 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Problem 1:&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; Positining cost&lt;/b&gt;&lt;/span&gt;가 높습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Data가 Disk에 저장되어 있다면 AccessTime이 데이터가 조각나있을 수록 높을텐데 이를 고려하지 않은 시스템입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Expensive한 Positioning Cost를 가집니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를들어 Data Block과 파일은 서로 자주 접근해야하는 관계임에도 불구하고 매우 멀리 떨어져있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이럴 경우 Seek Time이 늘어납니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Problem 2: &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Fragmentation&lt;/b&gt;&lt;/span&gt;이 이것을 더 심각하게 만듭니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 데이터 A-B-C-D가 순서대로 저장되어 있었더라도 B와 D가 지워진 후 E를 저장하려면 E가 조각나있는 상태가 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; FFS(Fast File System)&lt;/b&gt;&lt;/span&gt;을 사용하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FFS는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&quot;Disk aware&quot;&lt;/b&gt;&lt;/span&gt;한 방식으로 기존의 Access method는 내버려둔 상태로 Data Structure(=internel implementation)만 바꾸는 방식으로 구현됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FFS는 disk를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Cylinder Group(=Block Group)&lt;/b&gt;&lt;/span&gt;으로 나눕니다. Cylinder는 물리적인 Disk의 Surface에 담겨 있는 Track들을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1421&quot; data-origin-height=&quot;867&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceCGyA/btrnDF0Urza/xxoWaNxMYL4F1Nx5woRzEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceCGyA/btrnDF0Urza/xxoWaNxMYL4F1Nx5woRzEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceCGyA/btrnDF0Urza/xxoWaNxMYL4F1Nx5woRzEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceCGyA%2FbtrnDF0Urza%2FxxoWaNxMYL4F1Nx5woRzEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;565&quot; height=&quot;345&quot; data-origin-width=&quot;1421&quot; data-origin-height=&quot;867&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 방식은 Seek performance를 개선하기 위해 고안된 것으로, 같은 파일을 같은 그룹에 넣습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉, 기본적인 Policy는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;관련있는 데이터를 같이 둔다&lt;/b&gt; &lt;/span&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Policy 1: Directory는 어디에 두어야 할까요?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Cylinder Group중 할당된 디렉토리 수가 적고, inode number가 많이 남는 곳을 선택합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Directory data와 innode를 같은 그룹에 저장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Policy 2: File은 어디에 두어야 할까요?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 파일을 그것이 속한 디렉토리에와 같은 group에 배치합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러면 가까운 것은 더 가깝게 배치되죠?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러나 Issue 들이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Group이 너무 빨리 찹니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이게 인접할 거라는 보장이 존재하지 않습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;SEER Trace&lt;/b&gt;&lt;/span&gt; : 얼마나 인접해 있는지를 체크하는 Trace입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Large File의 경우 어떻게 배치해야할까요?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Large file은 Cyclic Group의 block 전체를 채웁니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그것은 related된 파일을 같이 배치할 수 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 Large File은 chunk로 나누어 disk전체에 나뉘어저 배치됩니다. &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Chunk사이즈는 충분히 크게 해주고, 이에 따르는 Overhead는 데이터를 전송하는데 사용하여 상각(armortization) 시켜줍니다. 즉 전송 시간, Seek Time의 비율을 조정해 주는 것입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Inode는 한개의 Cyclic Group에만 저장하고 Data는 분산시켜 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/50</guid>
      <comments>https://penguintravler.tistory.com/50#entry50comment</comments>
      <pubDate>Tue, 14 Dec 2021 22:30:19 +0900</pubDate>
    </item>
    <item>
      <title>Swapping and Page Replacement Policy</title>
      <link>https://penguintravler.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Operating System은 Virtual Space를 매우 크게 할당해 줍니다. 그것이 편리하고, 사용하기 쉽기 때문이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러니 저희는 Virtual Memory가 가득 차있을지, 아닐지 신경을 쓸 필요가 없는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 만약 Virtual Memory를 다 쓰는 프로그램이 아주 많아서 메모리가 부족하면 어떻게할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이를 위해서 OS는&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; Swapping&lt;/b&gt;&lt;/span&gt; 을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Disk안에 Page Size의 Unit을 만들어 두고 계속해서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Swap in, Swap out&lt;/b&gt;&lt;/span&gt; 시키는 것이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2373&quot; data-origin-height=&quot;844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2vYMI/btrnLI4LtQY/CnEQelxGtyRNCSzAD37vvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2vYMI/btrnLI4LtQY/CnEQelxGtyRNCSzAD37vvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2vYMI/btrnLI4LtQY/CnEQelxGtyRNCSzAD37vvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2vYMI%2FbtrnLI4LtQY%2FCnEQelxGtyRNCSzAD37vvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;201&quot; data-origin-width=&quot;2373&quot; data-origin-height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이럴 경우 Page Table에는 &lt;span style=&quot;color: #ee2323;&quot;&gt;present bit&lt;/span&gt;가 추가됩니다. 그러니까 Memory에서 이것을 찾아야하는건지 Disk에서 찾아야 하는건지 알려주는 용도이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Page Hit, Page fault&lt;/span&gt;&lt;/b&gt;는 이것이 Physical Memory에 각각 있을 경우, 없을 경우를 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 Page fault는 어떻게 해결할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page miss가 Page fault라는 Exception을 발생시킵니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OS의 fault handler가 Victim을 Select 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Victim을 Disk에 써 주고, Physical Memory에 Fault를 발생시킨 데이터를 써 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다시 한번 요청을 하면 Page Hit이 나게 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 어떻게 Victim을 Select할까요? 만약 자주 쓰는 걸 Victim Select를 했다가는 Page fault의 비용이 매우 비싸기 때문에 성능에 Critical 한 영향을 미칠 것입니다. (Disk는 DRAM보다 10,000x배 느림)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Effective Access Time&lt;/span&gt;&lt;/b&gt;을 통해서 Page fault가 영향을 얼마나 줄지 한번 봐 보도록 할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ51Ix/btrnVwIhoyZ/n5xawuw0uKmfkC5O4aPYZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ51Ix/btrnVwIhoyZ/n5xawuw0uKmfkC5O4aPYZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ51Ix/btrnVwIhoyZ/n5xawuw0uKmfkC5O4aPYZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ51Ix%2FbtrnVwIhoyZ%2Fn5xawuw0uKmfkC5O4aPYZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;570&quot; height=&quot;108&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;진짜 엄청난 영향을 주죠?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 어떻게 Page fault를 줄일 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일단 전에도 언급했듯이 정보에는 Locality가 있기 때문에 page fault는 생각보다 덜 발생하게 됩니다. 이 Locality를 얼마나 잘 살리느냐가 바로 Replacement Policy의 핵심입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고로 언제 Replacement가 일어날까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page가 가득 찼을때 할까요? 실제로는 아주 약간의 memory를 늘 free 상태로 유지하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Swap Daemon&lt;/b&gt;&lt;/span&gt;이라고 하는데요, free space에 High Watermark와 Low Watermark를 지정하여서, 빈 공간이 줄어 LW에 도달하게 되면 Swap Daemon이 Page를 쫓아내서 HW까지 빈 공간이 늘어나도록 만든 후 멈춥니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 Replacement Policy를 봅시다 OS는 Memory에게 누구를 갈아 끼울지를 결정하는데, 이를 결정하는 Policy가 바로 Replacement policy 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가장 간단한 Policy는&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; FIFO&lt;/b&gt;&lt;/span&gt;입니다. 가장 먼저 들어온 것을 내보내는 것이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이것은 얼마나 자주 사용되는지를 고려하지 않는 방식이라 비효율적입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한, Cache가 늘어날수록 Hit rate는 올라가야하는데 FIFO는 증가하기도 합니다. 이것은&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; Belady's anomaly&lt;/b&gt;&lt;/span&gt;라고 불리는 현상입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또 하나의 방법은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Random&lt;/b&gt;&lt;/span&gt; 입니다. Random은 종종 Optimal hit rate에 가까워질정도로 좋아지기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기까지가 History 없이 Victim을 Select하는 방법이었고 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;LRU(Recency),&lt;/b&gt;&lt;b&gt; LFU(Frequency)&lt;/b&gt;&lt;/span&gt;는 history를 고려하는 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 이것들이 각각의 Worklord에서 어떻게 동작할지를 한번 살펴볼까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KNj3z/btrnUJhvF1N/c6rlzvbsMb1LRkGeqcmU70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KNj3z/btrnUJhvF1N/c6rlzvbsMb1LRkGeqcmU70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KNj3z/btrnUJhvF1N/c6rlzvbsMb1LRkGeqcmU70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKNj3z%2FbtrnUJhvF1N%2Fc6rlzvbsMb1LRkGeqcmU70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;360&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Locality가 없기 때문에 Optimal 한 경우를 제외하면 그 어떠한것도 의미가 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpKurK/btrnV64apbs/QZSQwVGFHpCvpzRo0sK6R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpKurK/btrnV64apbs/QZSQwVGFHpCvpzRo0sK6R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpKurK/btrnV64apbs/QZSQwVGFHpCvpzRo0sK6R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpKurK%2FbtrnV64apbs%2FQZSQwVGFHpCvpzRo0sK6R1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;470&quot; height=&quot;342&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Locality가 존재할 경우 LRU가 제일 자주 쓰이는 Page들을 보관하기 때문에 제일 성능이 좋습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpCZGU/btrnOQWuXhu/fP2zfcgq7QKsZ1V9aKKNwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpCZGU/btrnOQWuXhu/fP2zfcgq7QKsZ1V9aKKNwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpCZGU/btrnOQWuXhu/fP2zfcgq7QKsZ1V9aKKNwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpCZGU%2FbtrnOQWuXhu%2FfP2zfcgq7QKsZ1V9aKKNwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;367&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 1~50 이라는 데이터를 Loop로 반복해서 넣는 경우 LRU나 FIFO는 Locality를 보장할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 LRU를 구현하는 방법에 대해서 알아볼까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Counter 사용하기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;페이지에 Reference할 때마다 시간을 Counter에 저장해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제일 작은 Counter를 찾아 페이지를 제거합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점은 Search through를 해 주어야 한다는 것입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Stack 사용하기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page가 Reference되면 Stack의 제일 상단으로 옮겨줍니다.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;장점은 Search through를 해줄 필요가 없다는 것입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점은 Update를 해주는 것이 비싸다는 것입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Clock Algorithm&lt;/b&gt;&lt;/span&gt;사용하기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware의 Support가 필요합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page가 Reference되면, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Reference bit&lt;/b&gt;&lt;/span&gt;가 1로 바뀝니다. (HW)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하드웨어는 절대 이 bit를 0으로 바꾸지 않고 OS가 바꾸도록 해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 페이지는 circular list로 system에 의해 arrange됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;clock의 시침이 시작할 페이지를 가리키고 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page replacement가 요구될때 돌면서 victim을 select할지 말지 결정합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;bit가 0이면 victim이 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;bit가 1이면 0으로 만들고 다음 page로 돕니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 경우 LRU만큼 성능이 뛰어나지는 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;LRU가 아니라 다른 알고리즘을 Implement할 때 고려되는 것들도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dirty Page&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HW가 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;modified bit(= dirty bit)&lt;/b&gt;&lt;/span&gt;를 포함해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이것은 Page가 수정되었다는 의미로, evict하려면 Disk에 다시 Write해 주어야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고로, 비용이 싼 Clean Page가 Victim이 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Dirty Page를 Disk에 기록하는 순간은 Dirty Page를 많이 모아&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; pending wirte&lt;/b&gt;&lt;/span&gt;가 될때 한번에 써 주는 것입니다. 그러면 IO를 최소화 할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page를 Memory에 언제 불러올까요?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Demand : 요구 될 때 불러옵니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Prefetching&lt;/b&gt;&lt;/span&gt; : 미리 예상하여 불러옵니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Thrashing&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;메모리가 과하게 Subscribed 되었을때 즉, Running Process가 요구하는 memory의 양이 physical 메모리를 초과하였을때 발생합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Subset of Process를 돌리지 않도록 결정합니다. 즉 돌아가는 Set of Process를 줄여줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/49</guid>
      <comments>https://penguintravler.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 14 Dec 2021 22:00:02 +0900</pubDate>
    </item>
    <item>
      <title>Paging with Smaller Tables</title>
      <link>https://penguintravler.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page Table 은 굉장히 크기가 큽니다. 동작중인 프로세스를 전부 저장해야 하기때문에 그 부담이 더 크죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PVQax/btrnLHShByL/gFgJ4Sfe7wlxD1tm4tv4I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PVQax/btrnLHShByL/gFgJ4Sfe7wlxD1tm4tv4I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PVQax/btrnLHShByL/gFgJ4Sfe7wlxD1tm4tv4I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPVQax%2FbtrnLHShByL%2FgFgJ4Sfe7wlxD1tm4tv4I0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;248&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다고 이렇게 Page Size를 늘이면 Page Table의 크기는 줄어들지만 &lt;span style=&quot;color: #ee2323;&quot;&gt;Internel Fragmentation&lt;/span&gt;이 매우 심각해집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 이것을 어떻게 해결할 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일단&lt;span style=&quot;color: #ee2323;&quot;&gt; Hybrid Approach&lt;/span&gt;를 해 봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일단 Page Table의 대부분은 비어 있습니다. 모든 프로그램이 Address Space를 전부 채워서 사용하는것은 아니죠.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;994&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9CIw5/btrnPKAN3vh/49rh8S8jsbQsRhIbbRLQxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9CIw5/btrnPKAN3vh/49rh8S8jsbQsRhIbbRLQxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9CIw5/btrnPKAN3vh/49rh8S8jsbQsRhIbbRLQxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9CIw5%2FbtrnPKAN3vh%2F49rh8S8jsbQsRhIbbRLQxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;161&quot; height=&quot;242&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 성질을 활용하여 segmentation과 paging을 합칠 겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전체 Address가 PageTable을 가지는게 아니라, cod heap stack 즉 logical Segment 하나당 PageTable을 가지는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러면 각 세그먼트에는 두 가지 register가 필요하겠죠?&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Base는 segment를 physical memory로 포인트 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Bound는 Limit은 Page Table이 끝나는 지점을 Point 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이럴 경우 Virtual Address는&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Lk19/btrnTElYhwb/mk9cDyqxVKOAVkQz6fHxLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Lk19/btrnTElYhwb/mk9cDyqxVKOAVkQz6fHxLk/img.png&quot; data-alt=&quot;VA of Hybrid Approach&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Lk19/btrnTElYhwb/mk9cDyqxVKOAVkQz6fHxLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Lk19%2FbtrnTElYhwb%2Fmk9cDyqxVKOAVkQz6fHxLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;669&quot; height=&quot;63&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VA of Hybrid Approach&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음과 같이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Segment Table로 Seg를 사용해 들어가서 Bound와 Base를 찾고 Base에 Page Table 주소가 있으니, 여기서 VPN을 사용하여 Paging처럼 Memory에 Access하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다만 이럴 경우 Externel Fragmentation과 Free space management라는 Segmentation의 문제가 똑같이 일어나게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 어떤 방법을 사용해야 할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Multi-level Page Tables&lt;/span&gt;라는 기술이 있습니다. Page Table을 Tree같은 것으로 조각내는 것이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1764&quot; data-origin-height=&quot;1071&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ADrR0/btrnJAlCrSM/kQ22yjq4Sd7ALInS9RnPP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ADrR0/btrnJAlCrSM/kQ22yjq4Sd7ALInS9RnPP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ADrR0/btrnJAlCrSM/kQ22yjq4Sd7ALInS9RnPP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FADrR0%2FbtrnJAlCrSM%2FkQ22yjq4Sd7ALInS9RnPP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;404&quot; data-origin-width=&quot;1764&quot; data-origin-height=&quot;1071&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 될 경우 장단점이 존재하는데,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Advantage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Memory를 아낄 수 있습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page Table을 여러개로 나누어 Allocate될 부분을 줄일 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Memory를 Manage하기 쉽습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;페이지 테이블을 저장할때 페이지 테이블이 연속적으로 저장되었어야하는데 이제 페이지테이블을 나누어 저장할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이를 level of Indirection이라고 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Disadvantage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Time-Space trade off : TLB miss가 나면 두번 이상 memory에 접근해야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Complexity : 구현이 어렵습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그런데 요즘 메모리가 커지고 있어서, 사실 많은 Page Table을 쓰지 않는 방식도 고려되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러니까 Physical Memory 의 사이즈 전체를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Inverted Page Table&lt;/b&gt;&lt;/span&gt;로 만들고, 그곳에서 찾은 PTE가 그냥 Physical Memory로 흘러가는 것이죠.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Advantage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Inverted Page Table은 Memory를 효율적으로 사용합니다. Process별 PageTable을 전부 저장할 이유가 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB miss가 일어났을때 Memory Reference가 적습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Disadvantage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hash collision 문제가 일어납니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이로 인해서 Worst -Access Time이 될 수도 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Entry의 숫자를 늘립니다. 즉 메모리 스페이스를 늘려야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page를 Share할 수 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Swapping이 지원되지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 Hash collision은 PFN을 Inverted PageTable에 더해줌으로써 해결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러면 PTE로 Physical Memory를 바로 알 수는 없지만, Sharing Problem역시 해결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/48</guid>
      <comments>https://penguintravler.tistory.com/48#entry48comment</comments>
      <pubDate>Tue, 14 Dec 2021 11:24:44 +0900</pubDate>
    </item>
    <item>
      <title>Breadth-First Search</title>
      <link>https://penguintravler.tistory.com/47</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;BFS Search Algorithm&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1639285708182&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def BFS(start):
    Set L_i = [] for i = 1,..,n
    L_0 = {start}
    for i = 0,...,n-1:
        for u in L_i:
            for each v in u.neighbor:
                if v.state = unvisited:
                    mark v as visited, and put in L_i+1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1771&quot; data-origin-height=&quot;1058&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vbs7B/btrnHRzgeSF/TKTjca8VqXKjhIWzX1mVuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vbs7B/btrnHRzgeSF/TKTjca8VqXKjhIWzX1mVuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vbs7B/btrnHRzgeSF/TKTjca8VqXKjhIWzX1mVuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvbs7B%2FbtrnHRzgeSF%2FTKTjca8VqXKjhIWzX1mVuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;592&quot; height=&quot;354&quot; data-origin-width=&quot;1771&quot; data-origin-height=&quot;1058&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Running Time은 O(n+m)으로 DFS와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Application - Shortest Path&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 Weight이 걸려 있지 않는 그래프의 경우 시작점으로부터의 최단 거리를 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;1197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c37P3R/btrnB830pem/qmiT13ApcTOOjYkROJOKmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c37P3R/btrnB830pem/qmiT13ApcTOOjYkROJOKmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c37P3R/btrnB830pem/qmiT13ApcTOOjYkROJOKmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc37P3R%2FbtrnB830pem%2FqmiT13ApcTOOjYkROJOKmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;528&quot; height=&quot;390&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;1197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Application - Bipratite Graph&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Biparatite Graph&lt;/b&gt;&lt;/span&gt;란 연결된 노드가 모드 Bipartite한 경우입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;1197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buKBZ1/btrnHR7ysmZ/hcebeofYnidRjHc1gfwawk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buKBZ1/btrnHR7ysmZ/hcebeofYnidRjHc1gfwawk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buKBZ1/btrnHR7ysmZ/hcebeofYnidRjHc1gfwawk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuKBZ1%2FbtrnHR7ysmZ%2FhcebeofYnidRjHc1gfwawk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;451&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;1197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 Graph가 만약 Not Bipartite하다면 cycle of odd length를 찾을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 BFS로 어떻게 Bipartite를 검증할까요? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아까 Visited Node에는 Coloring을 하지 말라고 했는데 Visited Node지만 Neighbor인 Node에 대해서는 색이 같은지 다른지를 알아봄으로써 이를 검증할 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>컴퓨터/CLRS</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/47</guid>
      <comments>https://penguintravler.tistory.com/47#entry47comment</comments>
      <pubDate>Mon, 13 Dec 2021 09:39:01 +0900</pubDate>
    </item>
    <item>
      <title>Translation Lookaside Buffer</title>
      <link>https://penguintravler.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB에 대한 내용은 저번에 Paging에 대한 글에서 살펴보았었죠?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;full associative method&lt;/b&gt;&lt;/span&gt;를 통해 관리됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통 TLB는 32,64,128개 정도의 Entry가 있는데, &lt;u&gt;Hardware가 TLB에서 이 엔트리를 parallel하게 검색&lt;/u&gt;하여 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB는 그리고 PFN 이외에도 valid bit, protection bit, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ASID(address-space identifier)&lt;/b&gt; &lt;/span&gt;등을 또 저장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 ASID의 쓰임새는 나중에 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB에는 두가지 이슈가 있는데 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1) TLB Miss를 누가 Handle할 것인지 (Hardware vs Software) 이고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2) Context Switch를 어떻게 관리할 것인지 (Flush vs ASID) 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1번 문제에 대해서 먼저 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mZD0m/btrnEI3S47h/IW9jeeDZQfbK0tfNbGB1vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mZD0m/btrnEI3S47h/IW9jeeDZQfbK0tfNbGB1vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mZD0m/btrnEI3S47h/IW9jeeDZQfbK0tfNbGB1vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmZD0m%2FbtrnEI3S47h%2FIW9jeeDZQfbK0tfNbGB1vK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;511&quot; height=&quot;311&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;967&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 Hardware가 manage할 경우에 대해 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware가 TLB Miss를 처음부터 끝까지 알아서 Control 합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware는 두가지 정보를 압니다. &lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Memory에 저장된 PTE의 Address (page table base register) (PTBR)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Page Table과 PTE의 format&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware은 Page Table을 &lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;walk&quot;&lt;/span&gt; 합니다.&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재 Page Table로 Jump 합니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;알맞은 PTE를 찾습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB에 들어가기 알맞게 주소를 추출합니다. (Page table translation)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TLB를 업데이트 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다시 정보를 Access하여 TLB HIT이 나도록 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 그렇다면 Software가 Manage하면 어떨까요? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실제로도 RISC나 MIPS 구조와 같은 Modern Architecture에서는 TLB Miss를 Operating System에서 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware가 exception을 띄워 TLB miss가 났다는 것을 알립니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;현재의 instruction stream을 멈춥니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Kernel에게 우선순위를 전부 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Trap handler &lt;/span&gt;&lt;/b&gt;로 넘어갑니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OS내의 Trap handler가 호출된 상황입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OS는 page table의 translation을 살펴봅니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OS가 TLB를 업데이트 하기 위해서 특별한 연산을 수행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;OS가 Trap에서 넘어옵니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다시 정보를 Access하여 TLB Hit가 나도록 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각각의 장-단점은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware-managed TLB&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(+) Efficient 합니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(&amp;ndash;) CPU Design이 복잡해집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(&amp;ndash;) Page Table의 유연성이 떨어집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(&amp;ndash;) TLB Miss가 날 가능성이 높습니다. (Hardware가 victim을 Choose하기 때문에)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Software-managed TLB&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(+) CPU Design이 간단해집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(+) Page Table이 유연해 집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(+) TLB Miss가 날 가능성이 낮습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(&amp;ndash;) 상대적으로 느립니다. ( Not Efficient )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 두번째 이슈에 대해서 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 Process A와 B에서 같은 VPN을 가질 경우 어떤 것을 찾아야 할지 알 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 한가지 방법은 Context Switch가 일어날때 Flush 해주는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Context Swtich가 일어날때 다음 프로세스를 위해서 전부 Flush 합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;간단한 방법은 전부다 0으로 채우는 방법입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Flush Operation은 언제 발생할까요?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Software관점에서 보면 하드웨어가 TLB-flush하는 명령을 제공하면 OS가 이것을 호출합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hardware 입장에서 보면 (PTBR)이 변경될때 CPU가 clean up 해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Switch마다 발생하는 TLB Miss로 인해서 Overhead가 심해집니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 다른 방법인 Identifier (ASID)를 추가하여 이를 확인하는 것입니다. 이 방법이 더 나은 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터/운영체제</category>
      <author>핑구힝구</author>
      <guid isPermaLink="true">https://penguintravler.tistory.com/46</guid>
      <comments>https://penguintravler.tistory.com/46#entry46comment</comments>
      <pubDate>Sun, 12 Dec 2021 22:11:59 +0900</pubDate>
    </item>
  </channel>
</rss>