<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발자 끄적끄적</title>
    <link>https://gotjs815.tistory.com/</link>
    <description>IT관련 정리한 내용을 차근차근 옮겨 담은 공간입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 28 Jun 2026 07:43:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>햏치</managingEditor>
    <item>
      <title>파이썬 기초</title>
      <link>https://gotjs815.tistory.com/218</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;파이썬&amp;gt; &lt;br /&gt;&amp;nbsp;-&amp;nbsp;객체지향&amp;nbsp;언어 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;객체&amp;nbsp;다루기&amp;gt; &lt;br /&gt;-&amp;nbsp;객체지향&amp;nbsp;특성과&amp;nbsp;강점. &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;객체&amp;nbsp;내부에&amp;nbsp;있는&amp;nbsp;함수를&amp;nbsp;멤버함수&amp;nbsp;혹은&amp;nbsp;메소드,&amp;nbsp;변수를&amp;nbsp;멤버&amp;nbsp;변수라고&amp;nbsp;한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;객체는&amp;nbsp;능동적&amp;nbsp;:&amp;nbsp;자신이&amp;nbsp;소유한&amp;nbsp;멤버&amp;nbsp;함수를&amp;nbsp;능동적으로&amp;nbsp;호출 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;객체&amp;nbsp;확인하기&amp;gt; &lt;br /&gt;-&amp;nbsp;type&amp;nbsp;:&amp;nbsp;객체의&amp;nbsp;클래스를&amp;nbsp;알려준다 &lt;br /&gt;-&amp;nbsp;dir&amp;nbsp;:&amp;nbsp;사용&amp;nbsp;가능한&amp;nbsp;멤버&amp;nbsp;함수를&amp;nbsp;알려준다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;OpenCV에서&amp;nbsp;영상은&amp;nbsp;numpy.ndarray&amp;nbsp;클래스&amp;nbsp;형의&amp;nbsp;객체&amp;gt; &lt;br /&gt;-&amp;nbsp;numpy는&amp;nbsp;다차원&amp;nbsp;배열을&amp;nbsp;위한&amp;nbsp;사실상&amp;nbsp;표준&amp;nbsp;모듈 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;이런&amp;nbsp;이유로&amp;nbsp;OpenCV는&amp;nbsp;영상을&amp;nbsp;numpy.ndarray로&amp;nbsp;표현 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;OpenCV가&amp;nbsp;다루는&amp;nbsp;영상은&amp;nbsp;numpy가&amp;nbsp;제공하는&amp;nbsp;다양한&amp;nbsp;기능(함수)을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;영상의&amp;nbsp;표현 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;화소(Pixel&amp;nbsp;:&amp;nbsp;Picture&amp;nbsp;Element)의&amp;nbsp;위치(r,c)&amp;nbsp;또는&amp;nbsp;(y,x) &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;화소값&amp;nbsp;조사 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex)&amp;nbsp;print(img[0,0,0],&amp;nbsp;img[0,0,1],&amp;nbsp;img[0,0,2])&amp;nbsp;#(0,0)&amp;nbsp;화소&amp;nbsp;조사 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex)&amp;nbsp;print(img[0,1,0],&amp;nbsp;img[0,1,1],&amp;nbsp;img[0,1,2])&amp;nbsp;#(0,1)&amp;nbsp;화소&amp;nbsp;조사&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>컴퓨터비젼</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/218</guid>
      <comments>https://gotjs815.tistory.com/218#entry218comment</comments>
      <pubDate>Wed, 11 Sep 2024 15:33:10 +0900</pubDate>
    </item>
    <item>
      <title>JDBC Properties 설정 방법</title>
      <link>https://gotjs815.tistory.com/217</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;스프링에서&amp;nbsp;JDBC&amp;nbsp;Properties&amp;nbsp;설정하는&amp;nbsp;방법&amp;gt; &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;MySQL &lt;br /&gt;JDBC.Driver=co&lt;a href=&quot;http://m.mysql.jdbc.Driver&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://m.mysql.jdbc.Driver&lt;/a&gt;&lt;br /&gt;JDBC.ConnectionURL=jdbc:mysql://URL주소:포트번호/DB명 &lt;br /&gt;JDBC.Username=계정명 &lt;br /&gt;JDBC.Password=비밀번호 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Oracle &lt;br /&gt;JDBC.DriverClassName=oracle.jdbc.driver.OracleDriver &lt;br /&gt;JDBC.url=jdbc:oracle:thin@URL주소:1521:xe &lt;br /&gt;JDBC:Username=계정명 &lt;br /&gt;JDBC:password=비밀번호 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;MS-SQL &lt;br /&gt;JDBC.DriverClassName=co&lt;a href=&quot;http://m.microsoft.sqlserver.jdbc.SQLServerDriver&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://m.microsoft.sqlserver.jdbc.SQLServerDriver&lt;/a&gt;&lt;br /&gt;JDBC.url=jdbc:sqlserver://로컬명;DatabaseName=&quot;DB명&quot; &lt;br /&gt;JDBC.Usename=계정명 &lt;br /&gt;JDBC.password=비밀번호&lt;/p&gt;</description>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/217</guid>
      <comments>https://gotjs815.tistory.com/217#entry217comment</comments>
      <pubDate>Thu, 1 Aug 2024 18:59:19 +0900</pubDate>
    </item>
    <item>
      <title>git hub 연결/해제</title>
      <link>https://gotjs815.tistory.com/216</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;깃허브&amp;nbsp;연결&amp;nbsp;해제&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;1)&amp;nbsp;연결되어&amp;nbsp;있는&amp;nbsp;원격&amp;nbsp;저장소&amp;nbsp;확인&amp;nbsp;:&amp;nbsp;git&amp;nbsp;remote&amp;nbsp;-v &lt;br /&gt;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;원격&amp;nbsp;저장소&amp;nbsp;연결&amp;nbsp;해제&amp;nbsp;:&amp;nbsp;git&amp;nbsp;remote&amp;nbsp;remove&amp;nbsp;origin &lt;br /&gt;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;해제&amp;nbsp;상태&amp;nbsp;확인&amp;nbsp;:&amp;nbsp;git&amp;nbsp;remote&amp;nbsp;-v &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;깃허브&amp;nbsp;레포지토리&amp;nbsp;연결 &lt;br /&gt;&amp;nbsp;&amp;nbsp;1) 원격 저장소 연결 : git remote add origin &lt;a href=&quot;http://gitub.com/계정명/레포지토리명.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://gitub.com/계정명/레포지토리명.git&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;2)&amp;nbsp;main(깃허브&amp;nbsp;기본&amp;nbsp;저장소&amp;nbsp;브랜치명)&amp;nbsp;branch&amp;nbsp;생성&amp;nbsp;:&amp;nbsp;git&amp;nbsp;branch&amp;nbsp;-M&amp;nbsp;main &lt;br /&gt;&amp;nbsp;&amp;nbsp;3)&amp;nbsp;main&amp;nbsp;branch&amp;nbsp;origin에&amp;nbsp;push&amp;nbsp;:&amp;nbsp;git&amp;nbsp;push&amp;nbsp;-u&amp;nbsp;origin&amp;nbsp;main &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;error:failed&amp;nbsp;to&amp;nbsp;push&amp;nbsp;some&amp;nbsp;refs&amp;nbsp;to&amp;nbsp;'repository&amp;nbsp;경로'&amp;nbsp;에러&amp;nbsp;해결&amp;gt; &lt;br /&gt;git&amp;nbsp;pull &lt;br /&gt;git&amp;nbsp;add&amp;nbsp;. &lt;br /&gt;git&amp;nbsp;commit&amp;nbsp;-m&amp;nbsp;&quot;~~&quot; &lt;br /&gt;git&amp;nbsp;push &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/216</guid>
      <comments>https://gotjs815.tistory.com/216#entry216comment</comments>
      <pubDate>Fri, 12 Jul 2024 17:03:39 +0900</pubDate>
    </item>
    <item>
      <title>보조 저장장치의 관리</title>
      <link>https://gotjs815.tistory.com/215</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;파일(File)&amp;gt; &lt;br&gt;-&amp;nbsp;사용자나&amp;nbsp;응용&amp;nbsp;프로그램의&amp;nbsp;관점 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;정보를&amp;nbsp;저장하고&amp;nbsp;관리하는&amp;nbsp;논리적인&amp;nbsp;단위 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;저장&amp;nbsp;형식과&amp;nbsp;내용은&amp;nbsp;프로그래머에&amp;nbsp;의해&amp;nbsp;결정 &lt;br&gt;&lt;br&gt;-&amp;nbsp;컴퓨터&amp;nbsp;시스템의&amp;nbsp;관점 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;정보를&amp;nbsp;저장하는&amp;nbsp;최소&amp;nbsp;단위의&amp;nbsp;컨테이너 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;바이트의&amp;nbsp;나열 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;OS에&amp;nbsp;의해&amp;nbsp;관리/조작됨 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;입출력&amp;nbsp;주소&amp;gt; &lt;br&gt;-&amp;nbsp;응용&amp;nbsp;프로그램은&amp;nbsp;파일&amp;nbsp;내&amp;nbsp;바이트&amp;nbsp;주소&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;내&amp;nbsp;바이트&amp;nbsp;위치(offset) &lt;br&gt;&lt;br&gt;-&amp;nbsp;운영체제는&amp;nbsp;논리&amp;nbsp;블록&amp;nbsp;주소(LBA,&amp;nbsp;logical&amp;nbsp;block&amp;nbsp;addr.)&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;저장&amp;nbsp;매체를&amp;nbsp;1차원의&amp;nbsp;연속된&amp;nbsp;데이터&amp;nbsp;블록들로&amp;nbsp;봄 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;저장&amp;nbsp;매체의&amp;nbsp;종류와&amp;nbsp;무관 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일을&amp;nbsp;블록&amp;nbsp;크기로&amp;nbsp;분할하고,&amp;nbsp;디스크에&amp;nbsp;분산&amp;nbsp;저장 &lt;br&gt;&lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;장치는&amp;nbsp;디스크&amp;nbsp;물리&amp;nbsp;주소&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디스크의&amp;nbsp;섹터&amp;nbsp;위치를&amp;nbsp;나타내는&amp;nbsp;주소 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;CHS&amp;nbsp;물리주소&amp;nbsp;=&amp;nbsp;(실린더번호,&amp;nbsp;헤드번호,&amp;nbsp;섹터번호) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디스크&amp;nbsp;장치의&amp;nbsp;펌웨어가&amp;nbsp;LBA를&amp;nbsp;CHS로&amp;nbsp;변환 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;하드&amp;nbsp;디스크&amp;nbsp;드라이브(HHD)의&amp;nbsp;구조&amp;gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;905&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8mKb7/btsHOjh3tjJ/8HB5tDvC0ltrCX0V2ceCdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8mKb7/btsHOjh3tjJ/8HB5tDvC0ltrCX0V2ceCdk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8mKb7/btsHOjh3tjJ/8HB5tDvC0ltrCX0V2ceCdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8mKb7%2FbtsHOjh3tjJ%2F8HB5tDvC0ltrCX0V2ceCdk%2Fimg.jpg&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;1506&quot; height=&quot;905&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;905&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;자기&amp;nbsp;디스크(Magnetic&amp;nbsp;Disk)구조&amp;gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;803&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfiitr/btsHNpJ6KNP/jrcYJqJWUEEniS3gaIGMz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfiitr/btsHNpJ6KNP/jrcYJqJWUEEniS3gaIGMz1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfiitr/btsHNpJ6KNP/jrcYJqJWUEEniS3gaIGMz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfiitr%2FbtsHNpJ6KNP%2FjrcYJqJWUEEniS3gaIGMz1%2Fimg.jpg&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;1496&quot; height=&quot;803&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;803&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;주소&amp;nbsp;계층화의&amp;nbsp;의미&amp;gt; &lt;br&gt;-&amp;nbsp;각&amp;nbsp;계층의&amp;nbsp;독립적&amp;nbsp;구현이&amp;nbsp;용이 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;응용&amp;nbsp;프로그램&amp;nbsp;개발&amp;nbsp;가능 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일을&amp;nbsp;바이트&amp;nbsp;나열로&amp;nbsp;가정하고&amp;nbsp;입출력&amp;nbsp;프로그래밍 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;OS&amp;nbsp;종류나&amp;nbsp;저장장치의&amp;nbsp;종류와&amp;nbsp;무관하게&amp;nbsp;파일&amp;nbsp;입출력&amp;nbsp;가능 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;운영체제&amp;nbsp;개발 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;저장&amp;nbsp;매체의&amp;nbsp;종류와&amp;nbsp;무관하게&amp;nbsp;OS&amp;nbsp;구현&amp;nbsp;가능 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;그저&amp;nbsp;바이트&amp;nbsp;주소를&amp;nbsp;LBA로&amp;nbsp;바꿈으로&amp;nbsp;장치&amp;nbsp;독립적으로&amp;nbsp;처리 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;저장&amp;nbsp;장치&amp;nbsp;개발 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;app,&amp;nbsp;OS와&amp;nbsp;무관하게&amp;nbsp;저장&amp;nbsp;장치&amp;nbsp;개발 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;계층화와&amp;nbsp;접근&amp;nbsp;주소의&amp;nbsp;변환&amp;gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OhH00/btsHNyz4SUf/tmS1waP2sBnkXLrkch5ZH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OhH00/btsHNyz4SUf/tmS1waP2sBnkXLrkch5ZH0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OhH00/btsHNyz4SUf/tmS1waP2sBnkXLrkch5ZH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOhH00%2FbtsHNyz4SUf%2FtmS1waP2sBnkXLrkch5ZH0%2Fimg.jpg&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;1283&quot; height=&quot;924&quot; data-origin-width=&quot;1283&quot; data-origin-height=&quot;924&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;시스템(File&amp;nbsp;System)&amp;gt; &lt;br&gt;-&amp;nbsp;저장&amp;nbsp;매체에&amp;nbsp;파일을&amp;nbsp;생성해&amp;nbsp;저장하고&amp;nbsp;읽고&amp;nbsp;쓰는&amp;nbsp;OS의&amp;nbsp;기능에&amp;nbsp;대한&amp;nbsp;통칭 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;시스템의&amp;nbsp;구성&amp;gt; &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;시스템의&amp;nbsp;논리&amp;nbsp;구조 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디렉터리&amp;nbsp;파일로&amp;nbsp;이루어지는&amp;nbsp;계층적인&amp;nbsp;트리&amp;nbsp;구조 &lt;br&gt;&amp;nbsp; &lt;br&gt;-&amp;nbsp;저장소에&amp;nbsp;구축되는&amp;nbsp;파일&amp;nbsp;시스템 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;사용&amp;nbsp;블록,&amp;nbsp;빈&amp;nbsp;블록에&amp;nbsp;대한&amp;nbsp;정보&amp;nbsp;유지 &lt;br&gt;&lt;br&gt;-&amp;nbsp;커널&amp;nbsp;내&amp;nbsp;파일&amp;nbsp;입출력&amp;nbsp;기능&amp;nbsp;구현 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;생성,&amp;nbsp;열기,&amp;nbsp;읽기,&amp;nbsp;쓰기,&amp;nbsp;닫기,&amp;nbsp;삭제 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;메타&amp;nbsp;정보&amp;nbsp;읽기/변경 &lt;br&gt;&lt;br&gt;-&amp;nbsp;app을&amp;nbsp;위한&amp;nbsp;시스템&amp;nbsp;호출&amp;nbsp;제공 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;open(),&amp;nbsp;close(),&amp;nbsp;read(),&amp;nbsp;write(),&amp;nbsp;seek()&amp;nbsp;등 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;읽기를&amp;nbsp;통한&amp;nbsp;입출력&amp;nbsp;개요&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cndpgF/btsHM6YlOHN/FV8b6ayTGX31zqcUkdWk91/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cndpgF/btsHM6YlOHN/FV8b6ayTGX31zqcUkdWk91/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cndpgF/btsHM6YlOHN/FV8b6ayTGX31zqcUkdWk91/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcndpgF%2FbtsHM6YlOHN%2FFV8b6ayTGX31zqcUkdWk91%2Fimg.jpg&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;1298&quot; height=&quot;938&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;보조&amp;nbsp;저장&amp;nbsp;장치&amp;nbsp;접근의&amp;nbsp;특징&amp;gt; &lt;br&gt;-&amp;nbsp;각&amp;nbsp;계층의&amp;nbsp;관점과&amp;nbsp;역할이&amp;nbsp;잘&amp;nbsp;구분됨 &lt;br&gt;-&amp;nbsp;OS는&amp;nbsp;app이&amp;nbsp;저장장치의&amp;nbsp;물리적&amp;nbsp;특성(종류,&amp;nbsp;구조,&amp;nbsp;위치&amp;nbsp;등)과&amp;nbsp;무관하게&amp;nbsp;입출력&amp;nbsp;지원&amp;nbsp;가능 &lt;br&gt;-&amp;nbsp;데이터는&amp;nbsp;여러&amp;nbsp;단계의&amp;nbsp;버퍼를&amp;nbsp;통해&amp;nbsp;전달됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시간&amp;nbsp;오버헤드&amp;nbsp;발생&amp;nbsp;가능 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;동일&amp;nbsp;내용&amp;nbsp;반복&amp;nbsp;접근시&amp;nbsp;캐시&amp;nbsp;효과 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;시스템&amp;nbsp;구조&amp;gt; &lt;br&gt;-&amp;nbsp;트리&amp;nbsp;형태의&amp;nbsp;계층&amp;nbsp;구조로&amp;nbsp;구성 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디렉터리&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQFmyl/btsHLGsTDUB/Toe78usOrWXSnaKkx5OAHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQFmyl/btsHLGsTDUB/Toe78usOrWXSnaKkx5OAHk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQFmyl/btsHLGsTDUB/Toe78usOrWXSnaKkx5OAHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQFmyl%2FbtsHLGsTDUB%2FToe78usOrWXSnaKkx5OAHk%2Fimg.jpg&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;425&quot; height=&quot;392&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;lt;파일 시스템(File System)&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;727&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gy9vv/btsHOfGLVu6/YsSFUWBly66IECourwuAx1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gy9vv/btsHOfGLVu6/YsSFUWBly66IECourwuAx1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gy9vv/btsHOfGLVu6/YsSFUWBly66IECourwuAx1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGy9vv%2FbtsHOfGLVu6%2FYsSFUWBly66IECourwuAx1%2Fimg.jpg&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;1194&quot; height=&quot;727&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;727&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;디렉터리(directory)&amp;gt; &lt;br&gt;-&amp;nbsp;자신에게&amp;nbsp;포함된(논리적으로)&amp;nbsp;파일에&amp;nbsp;대한&amp;nbsp;목록을&amp;nbsp;담고&amp;nbsp;있는&amp;nbsp;특수&amp;nbsp;파일 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;단,&amp;nbsp;파일&amp;nbsp;블록들이&amp;nbsp;저장된&amp;nbsp;디스크&amp;nbsp;상의&amp;nbsp;위치는&amp;nbsp;FAT/i-node라는&amp;nbsp;특별한&amp;nbsp;곳에&amp;nbsp;따로&amp;nbsp;저장 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일시스템&amp;nbsp;관리&amp;nbsp;위한&amp;nbsp;메타&amp;nbsp;정보&amp;gt; &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;시스템&amp;nbsp;전체에&amp;nbsp;대한&amp;nbsp;메타&amp;nbsp;정보 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;시스템의&amp;nbsp;전체&amp;nbsp;크기 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;시스템의&amp;nbsp;현재&amp;nbsp;사용&amp;nbsp;크기 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;시스템의&amp;nbsp;빈&amp;nbsp;크기&amp;nbsp;및&amp;nbsp;빈&amp;nbsp;블록&amp;nbsp;목록 &lt;br&gt;&lt;br&gt;-&amp;nbsp;각&amp;nbsp;파일에&amp;nbsp;대한&amp;nbsp;메타&amp;nbsp;정보 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;이름,&amp;nbsp;파일&amp;nbsp;크기 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;생성,&amp;nbsp;수정,&amp;nbsp;최근&amp;nbsp;접근&amp;nbsp;시각 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;생성&amp;nbsp;사용자&amp;nbsp;정보&amp;nbsp;및&amp;nbsp;접근&amp;nbsp;권한 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;시스템의&amp;nbsp;종류&amp;gt; &lt;br&gt;-&amp;nbsp;FAT(File&amp;nbsp;Allocation&amp;nbsp;Table)&amp;nbsp;파일&amp;nbsp;시스템 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;MS-DOS에서&amp;nbsp;사용.&amp;nbsp;최근에도&amp;nbsp;사용되고&amp;nbsp;있음 &lt;br&gt;&lt;br&gt;-&amp;nbsp;UFS(Unix&amp;nbsp;File&amp;nbsp;System) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Unix에서&amp;nbsp;사용 &lt;br&gt;&lt;br&gt;-&amp;nbsp;ext2,&amp;nbsp;ext3,&amp;nbsp;ext4 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;리눅스에서&amp;nbsp;사용 &lt;br&gt;&lt;br&gt;-&amp;nbsp;HFS(Hierarchical&amp;nbsp;File&amp;nbsp;System),&amp;nbsp;AFS &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Mac&amp;nbsp;운영체제에서&amp;nbsp;사용 &lt;br&gt;&lt;br&gt;-&amp;nbsp;NTFS(New&amp;nbsp;Technology&amp;nbsp;File&amp;nbsp;System) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;FAT&amp;nbsp;개선,&amp;nbsp;리눅스에서도&amp;nbsp;지원됨 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;시스템&amp;nbsp;구현&amp;nbsp;이슈&amp;gt; &lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;장치에&amp;nbsp;비어&amp;nbsp;있는&amp;nbsp;블록들의&amp;nbsp;리스트를&amp;nbsp;어떻게&amp;nbsp;관리할&amp;nbsp;것인가? &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;블록들을&amp;nbsp;디스크의&amp;nbsp;어느&amp;nbsp;영역에&amp;nbsp;어떻게&amp;nbsp;분산&amp;nbsp;배치할&amp;nbsp;것인가? &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;블록들이&amp;nbsp;저장된&amp;nbsp;디스크&amp;nbsp;내&amp;nbsp;위치들을&amp;nbsp;어떻게&amp;nbsp;관리할&amp;nbsp;것인가? &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Unix&amp;nbsp;파일&amp;nbsp;시스템의&amp;nbsp;구조&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;555&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/siaBA/btsHLOK4vea/fFrKP9t7wibzOXWX5lEHfk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/siaBA/btsHLOK4vea/fFrKP9t7wibzOXWX5lEHfk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/siaBA/btsHLOK4vea/fFrKP9t7wibzOXWX5lEHfk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsiaBA%2FbtsHLOK4vea%2FfFrKP9t7wibzOXWX5lEHfk%2Fimg.jpg&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;1010&quot; height=&quot;555&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;555&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;*부트블록&amp;nbsp; &lt;br&gt;-&amp;nbsp;부팅&amp;nbsp;때&amp;nbsp;메모리에&amp;nbsp;적재 &lt;br&gt;-&amp;nbsp;OS를&amp;nbsp;적재하는&amp;nbsp;코드 &lt;br&gt;&lt;br&gt;*수퍼&amp;nbsp;블록 &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;시스템&amp;nbsp;마테&amp;nbsp;정보&amp;nbsp;저장(매우&amp;nbsp;중요한&amp;nbsp;영역) &lt;br&gt;&lt;br&gt;*i-node &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;메타&amp;nbsp;정보&amp;nbsp;저장 &lt;br&gt;-&amp;nbsp;파일당&amp;nbsp;1개의&amp;nbsp;i-node&amp;nbsp;필요 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex)&amp;nbsp;파일&amp;nbsp;타입과&amp;nbsp;접근&amp;nbsp;권한 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;파일&amp;nbsp;소유자&amp;nbsp;ID &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;파일&amp;nbsp;그룹&amp;nbsp;ID(파일&amp;nbsp;접근&amp;nbsp;권한을&amp;nbsp;가진&amp;nbsp;그룹ID) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;파일&amp;nbsp;크기 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;마지막&amp;nbsp;파일&amp;nbsp;접근&amp;nbsp;시각 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;마지막&amp;nbsp;파일&amp;nbsp;수정&amp;nbsp;시각 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;마지막&amp;nbsp;i-node&amp;nbsp;수정&amp;nbsp;시작 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;파일&amp;nbsp;블록들에&amp;nbsp;대한&amp;nbsp;인덱스&amp;nbsp;등&amp;nbsp; &lt;br&gt;&lt;br&gt;*i-node&amp;nbsp;리스트(i-node들이&amp;nbsp;나열된&amp;nbsp;일련의&amp;nbsp;목록) &lt;br&gt;-&amp;nbsp;i-node&amp;nbsp;리스트의&amp;nbsp;크기는&amp;nbsp;디스크&amp;nbsp;포맷&amp;nbsp;시&amp;nbsp;결정,&amp;nbsp;포맷&amp;nbsp;후&amp;nbsp;i-node의&amp;nbsp;개수는&amp;nbsp;고정 &lt;br&gt;-&amp;nbsp;파일이&amp;nbsp;생성될&amp;nbsp;때마다&amp;nbsp;빈&amp;nbsp;i-node&amp;nbsp;할당,&amp;nbsp;메타&amp;nbsp;정보&amp;nbsp;기록 &lt;br&gt;-&amp;nbsp;i-node의&amp;nbsp;번호는&amp;nbsp;0부터&amp;nbsp;시작 &lt;br&gt;-&amp;nbsp;루트&amp;nbsp;디렉터리의&amp;nbsp;i-node&amp;nbsp;번호는&amp;nbsp;수퍼&amp;nbsp;블록에&amp;nbsp;기록,&amp;nbsp;리눅스의&amp;nbsp;경우2,&amp;nbsp;유닉스의&amp;nbsp;경우1 &lt;br&gt;-&amp;nbsp;0번&amp;nbsp;i-node는&amp;nbsp;오류&amp;nbsp;처리를&amp;nbsp;위해&amp;nbsp;예약 &lt;br&gt;&lt;br&gt;&lt;br&gt;*데이터&amp;nbsp;블록들&amp;nbsp; &lt;br&gt;-&amp;nbsp;파일과&amp;nbsp;디렉터리가&amp;nbsp;저장되는&amp;nbsp;공간 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;디렉터리&amp;nbsp;블록&amp;gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lduQe/btsHOhxOpwI/kWZh5ZOJyKIBqL929kjfjk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lduQe/btsHOhxOpwI/kWZh5ZOJyKIBqL929kjfjk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lduQe/btsHOhxOpwI/kWZh5ZOJyKIBqL929kjfjk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlduQe%2FbtsHOhxOpwI%2FkWZh5ZOJyKIBqL929kjfjk%2Fimg.jpg&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;935&quot; height=&quot;574&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;수퍼&amp;nbsp;블럭(super&amp;nbsp;block)&amp;gt; &lt;br&gt;-&amp;nbsp;파일&amp;nbsp;시스템&amp;nbsp;유지&amp;nbsp;관리를&amp;nbsp;위해&amp;nbsp;중요한&amp;nbsp;정보인&amp;nbsp;파일&amp;nbsp;시스템&amp;nbsp;메타&amp;nbsp;정보&amp;nbsp;기록 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;시스템의&amp;nbsp;크기와&amp;nbsp;상태&amp;nbsp;정보 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;자유&amp;nbsp;블록들의&amp;nbsp;리스트와&amp;nbsp;그&amp;nbsp;수&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;inode&amp;nbsp;리스트의&amp;nbsp;크기 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;자유&amp;nbsp;inode들의&amp;nbsp;리스트와&amp;nbsp;그&amp;nbsp;수&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;자유&amp;nbsp;inode&amp;nbsp;리스트에서&amp;nbsp;다음&amp;nbsp;자유&amp;nbsp;inode&amp;nbsp;인덱스 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;루트&amp;nbsp;디렉터리의&amp;nbsp;i-node&amp;nbsp;번호 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;수퍼&amp;nbsp;블록이&amp;nbsp;갱신된&amp;nbsp;최근&amp;nbsp;시간 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;블록&amp;nbsp;할당(File&amp;nbsp;Allocation)_Unix&amp;gt; &lt;br&gt;-&amp;nbsp;i-node의&amp;nbsp;15개&amp;nbsp;인덱스로&amp;nbsp;블록들의&amp;nbsp;위치&amp;nbsp;저장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;12개의&amp;nbsp;직접&amp;nbsp;인덱스&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;12개의&amp;nbsp;파일&amp;nbsp;블록&amp;nbsp;번호&amp;nbsp;:&amp;nbsp;12&amp;nbsp;x&amp;nbsp;4KB&amp;nbsp;=&amp;nbsp;48KB &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1개의&amp;nbsp;간접&amp;nbsp;인덱스 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;한&amp;nbsp;블록이&amp;nbsp;4KB이고,&amp;nbsp;블록&amp;nbsp;번호가&amp;nbsp;32비트(4바이트)&amp;nbsp;일&amp;nbsp;때 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;4KB/4B&amp;nbsp;=&amp;nbsp;1024&amp;nbsp;블록 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;크기&amp;nbsp;:&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;4KB&amp;nbsp;=&amp;nbsp;4&amp;nbsp;x&amp;nbsp;(2^20B)&amp;nbsp;=&amp;nbsp;4MB &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1개의&amp;nbsp;2중&amp;nbsp;간접&amp;nbsp;인덱스 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;1024&amp;nbsp;블록 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;크기&amp;nbsp;:&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;4KB&amp;nbsp;=&amp;nbsp;4&amp;nbsp;x&amp;nbsp;2^30&amp;nbsp;바이트&amp;nbsp;=&amp;nbsp;4GB &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1개의&amp;nbsp;3중&amp;nbsp;간접&amp;nbsp;인덱스&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;1024&amp;nbsp;블록 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;크기&amp;nbsp;:&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;4KB&amp;nbsp;=&amp;nbsp;4&amp;nbsp;x&amp;nbsp;2^40&amp;nbsp;바이트&amp;nbsp;=&amp;nbsp;4TB&amp;nbsp; &lt;br&gt;&lt;br&gt;*바이트(byte)&amp;nbsp;:&amp;nbsp;1byte&amp;nbsp;=&amp;nbsp;8bit &lt;br&gt;&amp;nbsp;킬로&amp;nbsp;바이트(KB)&amp;nbsp;=&amp;nbsp;1KB&amp;nbsp;=&amp;nbsp;1024byte,&amp;nbsp;1KB&amp;nbsp;=&amp;nbsp;1024&amp;nbsp;x&amp;nbsp;8 &lt;br&gt;&amp;nbsp;메가&amp;nbsp;바이트(MB)&amp;nbsp;=&amp;nbsp;1MB&amp;nbsp;=&amp;nbsp;1024KB &lt;br&gt;&amp;nbsp;기가&amp;nbsp;바이트(GB)&amp;nbsp;=&amp;nbsp;1GB&amp;nbsp;=&amp;nbsp;1024MB &lt;br&gt;&amp;nbsp;테라&amp;nbsp;바이트(TB)&amp;nbsp;=&amp;nbsp;1TB&amp;nbsp;=&amp;nbsp;1024GB &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;블록의&amp;nbsp;할당&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzY0Ru/btsHLyaFICe/P9B5cf61rH467AYWInTbF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzY0Ru/btsHLyaFICe/P9B5cf61rH467AYWInTbF0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzY0Ru/btsHLyaFICe/P9B5cf61rH467AYWInTbF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzY0Ru%2FbtsHLyaFICe%2FP9B5cf61rH467AYWInTbF0%2Fimg.jpg&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;687&quot; height=&quot;578&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;/usr/source/main.c&amp;gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWoiH1/btsHNsUnsax/gOZlvGhkxMPqi6SKAk45qK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWoiH1/btsHNsUnsax/gOZlvGhkxMPqi6SKAk45qK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWoiH1/btsHNsUnsax/gOZlvGhkxMPqi6SKAk45qK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWoiH1%2FbtsHNsUnsax%2FgOZlvGhkxMPqi6SKAk45qK%2Fimg.jpg&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;717&quot; height=&quot;585&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일의&amp;nbsp;i-node&amp;nbsp;찾기&amp;gt; &lt;br&gt;-&amp;nbsp;파일을&amp;nbsp;읽고&amp;nbsp;쓰기&amp;nbsp;위해&amp;nbsp;파일&amp;nbsp;블록들의&amp;nbsp;위치&amp;nbsp;파악&amp;nbsp;필요 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일블록들의&amp;nbsp;위치는&amp;nbsp;i-node의&amp;nbsp;15개&amp;nbsp;인덱스로&amp;nbsp;유지 &lt;br&gt;&lt;br&gt;-&amp;nbsp;ex)&amp;nbsp;/urs/source/main.c &lt;br&gt;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;수퍼&amp;nbsp;블록에서&amp;nbsp;루트(/)의&amp;nbsp;i-node&amp;nbsp;번호&amp;nbsp;알아내기 &lt;br&gt;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;루브&amp;nbsp;디렉터리(/)의&amp;nbsp;i-node&amp;nbsp;읽기 &lt;br&gt;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;루트&amp;nbsp;디렉터리에서&amp;nbsp;/usr의&amp;nbsp;i-node&amp;nbsp;알아내기 &lt;br&gt;&amp;nbsp;&amp;nbsp;4.&amp;nbsp;/usr&amp;nbsp;디렉터리를&amp;nbsp;읽고&amp;nbsp;/usr/source&amp;nbsp;파일의&amp;nbsp;i-node&amp;nbsp;번호&amp;nbsp;알아내기 &lt;br&gt;&amp;nbsp;&amp;nbsp;5.&amp;nbsp;/usr/source&amp;nbsp;디렉터리&amp;nbsp;읽고&amp;nbsp;/usr/source/main.c&amp;nbsp;파일의&amp;nbsp;i-node&amp;nbsp;번호&amp;nbsp;알아내기 &lt;br&gt;&amp;nbsp;&amp;nbsp;6.&amp;nbsp;/usr/source/main.c&amp;nbsp;파일&amp;nbsp;읽기 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;입출력&amp;nbsp;연산&amp;gt; &lt;br&gt;-&amp;nbsp;커널의&amp;nbsp;파일&amp;nbsp;시스템은&amp;nbsp;파일&amp;nbsp;입출력을&amp;nbsp;위한&amp;nbsp;시스템&amp;nbsp;호출&amp;nbsp;함수&amp;nbsp;제공 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;open() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;read() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;write() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;close() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;chmod() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;create() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;mount() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;unmount() &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;등 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;열기&amp;nbsp;:&amp;nbsp;open()&amp;gt; &lt;br&gt;-&amp;nbsp;왜&amp;nbsp;파일을&amp;nbsp;열어야&amp;nbsp;하나? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일이&amp;nbsp;존재하는지&amp;nbsp;확인 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일에&amp;nbsp;대한&amp;nbsp;현재&amp;nbsp;프로세스의&amp;nbsp;접근&amp;nbsp;권한&amp;nbsp;확인 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일을&amp;nbsp;읽고&amp;nbsp;쓰기&amp;nbsp;위한&amp;nbsp;커널&amp;nbsp;내&amp;nbsp;자료&amp;nbsp;구조&amp;nbsp;형성 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;메모리&amp;nbsp;i-node&amp;nbsp;테이블 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스별&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;버퍼&amp;nbsp;캐시 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;열기&amp;nbsp;후&amp;nbsp;형성되는&amp;nbsp;커널&amp;nbsp;자료&amp;nbsp;구조&amp;gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQhgkZ/btsHNYZusES/fO1UTsRTac9M3A5LBw7yZK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQhgkZ/btsHNYZusES/fO1UTsRTac9M3A5LBw7yZK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQhgkZ/btsHNYZusES/fO1UTsRTac9M3A5LBw7yZK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQhgkZ%2FbtsHNYZusES%2FfO1UTsRTac9M3A5LBw7yZK%2Fimg.jpg&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;815&quot; height=&quot;462&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;입출력을&amp;nbsp;위한&amp;nbsp;커널&amp;nbsp;내&amp;nbsp;자료&amp;nbsp;구조(1/2)&amp;gt; &lt;br&gt;-&amp;nbsp;메모리&amp;nbsp;i-node&amp;nbsp;테이블 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;열린&amp;nbsp;파일의&amp;nbsp;디스크&amp;nbsp;상의&amp;nbsp;i-node를&amp;nbsp;읽어&amp;nbsp;메모리&amp;nbsp;내에&amp;nbsp;저장한&amp;nbsp;테이블 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;블록&amp;nbsp;위치&amp;nbsp;등&amp;nbsp;i-node를&amp;nbsp;액세스할&amp;nbsp;때&amp;nbsp;빠른&amp;nbsp;처리를&amp;nbsp;위해&amp;nbsp;메모리에&amp;nbsp;적재 &lt;br&gt;&lt;br&gt;-&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블(open&amp;nbsp;file&amp;nbsp;table) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시스템&amp;nbsp;내의&amp;nbsp;모든&amp;nbsp;열린&amp;nbsp;파일들에&amp;nbsp;대한&amp;nbsp;정보&amp;nbsp;기록 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;열기&amp;nbsp;모드,&amp;nbsp;파일&amp;nbsp;옵셋(file&amp;nbsp;offset),&amp;nbsp;메모리에&amp;nbsp;적재된&amp;nbsp;inode&amp;nbsp;주소 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;모드&amp;nbsp;프로세스에&amp;nbsp;의해&amp;nbsp;공유 &lt;br&gt;&lt;br&gt;*오프셋(offset) &lt;br&gt;-&amp;nbsp;배열이나&amp;nbsp;자료구조&amp;nbsp;오브젝트&amp;nbsp;내의&amp;nbsp;오프셋(offset)은&amp;nbsp;일반적으로&amp;nbsp;동일&amp;nbsp;프로젝트&amp;nbsp;안에서&amp;nbsp;오브젝트&amp;nbsp;처음부터&amp;nbsp;주어진&amp;nbsp;요소나&amp;nbsp;지점까지의&amp;nbsp;변위차를&amp;nbsp;나타내는&amp;nbsp;정수형이다 &lt;br&gt;&amp;nbsp;&amp;nbsp;이를테면,&amp;nbsp;문자&amp;nbsp;A의&amp;nbsp;배열이&amp;nbsp;'abcdef'를&amp;nbsp;포함한다면&amp;nbsp;'c'문자는&amp;nbsp;A시작점에서&amp;nbsp;2의&amp;nbsp;오프셋을&amp;nbsp;지닌다고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex)&amp;nbsp;문자&amp;nbsp;C는&amp;nbsp;100번지의&amp;nbsp;주소를&amp;nbsp;가리키고&amp;nbsp;있다.&amp;nbsp;'C+7'&amp;nbsp;위와&amp;nbsp;같은&amp;nbsp;수식이&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;'7'이&amp;nbsp;오프셋(offset)을&amp;nbsp;의미한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;또한,&amp;nbsp;이&amp;nbsp;수식의&amp;nbsp;결과는&amp;nbsp;107번지를&amp;nbsp;의미한다.&amp;nbsp;오프셋을&amp;nbsp;이용하여&amp;nbsp;주소를&amp;nbsp;나타내는&amp;nbsp;'상대주소&amp;nbsp;지정방식'&amp;nbsp;이라고도&amp;nbsp;표현한다 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;입출력을&amp;nbsp;위한&amp;nbsp;커널&amp;nbsp;내&amp;nbsp;자료&amp;nbsp;구조(2/2)&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스별&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;프로세스가&amp;nbsp;연&amp;nbsp;파일에&amp;nbsp;대해&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;항목&amp;nbsp;주소를&amp;nbsp;가짐 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스&amp;nbsp;마다&amp;nbsp;하나씩&amp;nbsp;있음(스레드간&amp;nbsp;공유) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스가&amp;nbsp;파일을&amp;nbsp;열&amp;nbsp;때마다&amp;nbsp;항목&amp;nbsp;할당,&amp;nbsp;닫으면&amp;nbsp;소멸시킴 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;항목&amp;nbsp;번호는&amp;nbsp;open()의&amp;nbsp;반환값(파일&amp;nbsp;디스크립터) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;운영체제는&amp;nbsp;프로세스를&amp;nbsp;실행시킬&amp;nbsp;때&amp;nbsp;표준&amp;nbsp;입력,&amp;nbsp;표준&amp;nbsp;출력,&amp;nbsp;표준&amp;nbsp;오류용으로&amp;nbsp;3개의&amp;nbsp;항목을&amp;nbsp;열어놓음,&amp;nbsp;각각&amp;nbsp;0,1,2&amp;nbsp;항목 &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;이&amp;nbsp;테이블은&amp;nbsp;PCB에&amp;nbsp;저장 &lt;br&gt;&lt;br&gt;-&amp;nbsp;버퍼&amp;nbsp;캐시(buffer&amp;nbsp;cache) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;읽혀지거나&amp;nbsp;쓰여지는&amp;nbsp;파일&amp;nbsp;블록들이&amp;nbsp;일시적으로&amp;nbsp;저장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디스크&amp;nbsp;블록&amp;nbsp;번호로만&amp;nbsp;관리 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;열기&amp;nbsp;과정&amp;gt; &lt;br&gt;1.&amp;nbsp;파일&amp;nbsp;이름으로&amp;nbsp;i-node&amp;nbsp;번호를&amp;nbsp;알아내기 &lt;br&gt;2.&amp;nbsp;디스크&amp;nbsp;i-node를&amp;nbsp;커널&amp;nbsp;메모리의&amp;nbsp;i-node&amp;nbsp;테이블에&amp;nbsp;적재 &lt;br&gt;3.&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블에&amp;nbsp;새&amp;nbsp;항목&amp;nbsp;만들기 &lt;br&gt;4.&amp;nbsp;프로세스별&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블에&amp;nbsp;새&amp;nbsp;항목&amp;nbsp;만들기 &lt;br&gt;5.&amp;nbsp;open()은&amp;nbsp;프로세스별&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;항목&amp;nbsp;번호&amp;nbsp;반환 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;읽기&amp;nbsp;과정&amp;gt; &lt;br&gt;1.&amp;nbsp;read()는&amp;nbsp;fd번의&amp;nbsp;프로세스별&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;참조 &lt;br&gt;2.&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;참조 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;R&amp;nbsp;모드(읽기&amp;nbsp;허용)가&amp;nbsp;아닌&amp;nbsp;경우&amp;nbsp;오류로&amp;nbsp;리턴 &lt;br&gt;3.&amp;nbsp;i-node&amp;nbsp;참조 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;i-node에서&amp;nbsp;파일&amp;nbsp;블록들의&amp;nbsp;리스트&amp;nbsp;확보 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;테이블&amp;nbsp;항목에서&amp;nbsp;offset&amp;nbsp;확인&amp;nbsp;후&amp;nbsp;파일&amp;nbsp;블록&amp;nbsp;번호로&amp;nbsp;변환 &lt;br&gt;4.&amp;nbsp;해당&amp;nbsp;블록이&amp;nbsp;버퍼&amp;nbsp;캐시에&amp;nbsp;있는&amp;nbsp;지&amp;nbsp;확인 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;블록이&amp;nbsp;버퍼&amp;nbsp;캐시에&amp;nbsp;없으면,&amp;nbsp;버퍼&amp;nbsp;캐시를&amp;nbsp;할당받고&amp;nbsp;디스크에서&amp;nbsp;버퍼&amp;nbsp;캐시로&amp;nbsp;읽기 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;할당&amp;nbsp;받은&amp;nbsp;버퍼&amp;nbsp;캐시가&amp;nbsp;dirty이면&amp;nbsp;버퍼&amp;nbsp;캐시에&amp;nbsp;있는&amp;nbsp;블록을&amp;nbsp;디스크에&amp;nbsp;쓰기 &lt;br&gt;5.&amp;nbsp;버퍼&amp;nbsp;캐시로부터&amp;nbsp;사용자&amp;nbsp;영역으로&amp;nbsp;블록&amp;nbsp;복사&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JClJT/btsHMxvlQPp/jCMoF8K6owVDeUXNfn3bqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JClJT/btsHMxvlQPp/jCMoF8K6owVDeUXNfn3bqk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JClJT/btsHMxvlQPp/jCMoF8K6owVDeUXNfn3bqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJClJT%2FbtsHMxvlQPp%2FjCMoF8K6owVDeUXNfn3bqk%2Fimg.jpg&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;711&quot; height=&quot;467&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;쓰기&amp;nbsp;과정&amp;gt; &lt;br&gt;1.&amp;nbsp;write()는&amp;nbsp;fd번호의&amp;nbsp;프로세스별&amp;nbsp;파일&amp;nbsp;테이블을&amp;nbsp;참조 &lt;br&gt;2.&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;참조 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;W&amp;nbsp;모드(쓰기&amp;nbsp;허용)가&amp;nbsp;아니면&amp;nbsp;오류로&amp;nbsp;리턴 &lt;br&gt;3.&amp;nbsp;i-node&amp;nbsp;참조 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;i-node에서&amp;nbsp;파일&amp;nbsp;블록들의&amp;nbsp;리스트&amp;nbsp;확보 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;항목에서&amp;nbsp;offset&amp;nbsp;확인&amp;nbsp;후&amp;nbsp;파일&amp;nbsp;블록&amp;nbsp;번호로&amp;nbsp;변환 &lt;br&gt;4.&amp;nbsp;해당&amp;nbsp;블록이&amp;nbsp;버퍼&amp;nbsp;캐시에&amp;nbsp;있는&amp;nbsp;지&amp;nbsp;확인 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;블록이&amp;nbsp;버퍼&amp;nbsp;캐시에&amp;nbsp;없으면,&amp;nbsp;버퍼&amp;nbsp;캐시를&amp;nbsp;할당&amp;nbsp;받고&amp;nbsp;디스크&amp;nbsp;블록을&amp;nbsp;버퍼&amp;nbsp;캐시로&amp;nbsp;읽어&amp;nbsp;들이기 &lt;br&gt;5.&amp;nbsp;사용자&amp;nbsp;공간의&amp;nbsp;버퍼에서&amp;nbsp;버퍼&amp;nbsp;캐시로&amp;nbsp;쓰기 &lt;br&gt;6.&amp;nbsp;추후&amp;nbsp;버퍼&amp;nbsp;캐시가&amp;nbsp;교체되거나&amp;nbsp;플러시&amp;nbsp;될&amp;nbsp;때,&amp;nbsp;버퍼&amp;nbsp;캐시의&amp;nbsp;내용이&amp;nbsp;저장&amp;nbsp;장치에&amp;nbsp;기록 &lt;br&gt;*버퍼&amp;nbsp;플러시(buffer&amp;nbsp;flush)&amp;nbsp;:&amp;nbsp;버퍼가&amp;nbsp;꽉&amp;nbsp;차지&amp;nbsp;않았어도&amp;nbsp;즉시&amp;nbsp;출력을&amp;nbsp;하여&amp;nbsp;버퍼를&amp;nbsp;비워버리는&amp;nbsp;것 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWUQRm/btsHLX2gPEs/F1H46dEtlFf5gMbveLfBnK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWUQRm/btsHLX2gPEs/F1H46dEtlFf5gMbveLfBnK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWUQRm/btsHLX2gPEs/F1H46dEtlFf5gMbveLfBnK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWUQRm%2FbtsHLX2gPEs%2FF1H46dEtlFf5gMbveLfBnK%2Fimg.jpg&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;711&quot; height=&quot;467&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;파일&amp;nbsp;닫기&amp;nbsp;:&amp;nbsp;close()&amp;gt; &lt;br&gt;-&amp;nbsp;open()에서&amp;nbsp;구성한&amp;nbsp;자료&amp;nbsp;구조를&amp;nbsp;해제&amp;nbsp;하는&amp;nbsp;괒어 &lt;br&gt;1.&amp;nbsp;프로세스&amp;nbsp;별&amp;nbsp;파일&amp;nbsp;테이블로부터&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;항목을&amp;nbsp;찾음 &lt;br&gt;2.&amp;nbsp;버퍼&amp;nbsp;캐시에&amp;nbsp;있는&amp;nbsp;이&amp;nbsp;파일의&amp;nbsp;블록들이&amp;nbsp;수정되었거나&amp;nbsp;새로&amp;nbsp;만든&amp;nbsp;블록인&amp;nbsp;경우&amp;nbsp;디스크에&amp;nbsp;기록 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;캐시&amp;nbsp;내용은&amp;nbsp;남겨둠 &lt;br&gt;3.&amp;nbsp;메모리&amp;nbsp;i-node의&amp;nbsp;사용&amp;nbsp;해제 &lt;br&gt;4.&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블의&amp;nbsp;항목을&amp;nbsp;(지우고)&amp;nbsp;반환하기 &lt;br&gt;5.&amp;nbsp;프로세스의&amp;nbsp;오픈&amp;nbsp;파일&amp;nbsp;테이블&amp;nbsp;항목에&amp;nbsp;기록된&amp;nbsp;내용&amp;nbsp;삭제&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQWzyd/btsHMBEqpon/IyKsxXe9PUsXvseX9DeCN1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQWzyd/btsHMBEqpon/IyKsxXe9PUsXvseX9DeCN1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQWzyd/btsHMBEqpon/IyKsxXe9PUsXvseX9DeCN1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQWzyd%2FbtsHMBEqpon%2FIyKsxXe9PUsXvseX9DeCN1%2Fimg.jpg&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;793&quot; height=&quot;449&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;디스크&amp;nbsp;스케줄링&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스들의&amp;nbsp;디스크&amp;nbsp;I/O&amp;nbsp;요청들이&amp;nbsp;큐에&amp;nbsp;대기,&amp;nbsp;이&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;선택해&amp;nbsp;처리 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;효율적인&amp;nbsp;디스크&amp;nbsp;접근&amp;nbsp;스케줄링&amp;nbsp;필요 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;큐에&amp;nbsp;저장된&amp;nbsp;입출력&amp;nbsp;오청들의&amp;nbsp;목표&amp;nbsp;실린더&amp;nbsp;위치&amp;nbsp;고려 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;평균&amp;nbsp;탐색&amp;nbsp;시간/평균&amp;nbsp;디스크&amp;nbsp;접근&amp;nbsp;시간&amp;nbsp;최소화 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;디스크&amp;nbsp;스케줄링&amp;nbsp;알고리즘&amp;gt; &lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;헤드&amp;nbsp;이동을&amp;nbsp;최소화 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;FCFS &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;SSTF(Shortest&amp;nbsp;Seek&amp;nbsp;Time&amp;nbsp;First) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;SCAN &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;C-SCAN(Circular&amp;nbsp;SCAN) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;LOOK &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;C-LOOK(Circular&amp;nbsp;LOOK) &lt;br&gt;&lt;br&gt;-&amp;nbsp;평가&amp;nbsp;기준 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;평균&amp;nbsp;탐색&amp;nbsp;거리 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;FCFS(First-Come-First-Serve)&amp;nbsp;Scheduling&amp;gt; &lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;큐&amp;nbsp;검색&amp;nbsp;불필요.&amp;nbsp;구현이&amp;nbsp;쉽고&amp;nbsp;기아&amp;nbsp;없음 &lt;br&gt;-&amp;nbsp;일반적으로&amp;nbsp;빠른&amp;nbsp;서비스를&amp;nbsp;제공하지&amp;nbsp;못함 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhhUpk/btsHLOqM0Fc/koJ0ZfmdH7O56Lmqe5YR4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhhUpk/btsHLOqM0Fc/koJ0ZfmdH7O56Lmqe5YR4k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhhUpk/btsHLOqM0Fc/koJ0ZfmdH7O56Lmqe5YR4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhhUpk%2FbtsHLOqM0Fc%2FkoJ0ZfmdH7O56Lmqe5YR4k%2Fimg.jpg&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;1048&quot; height=&quot;715&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;SSTF(Shortest&amp;nbsp;Seek&amp;nbsp;Time&amp;nbsp;First)&amp;nbsp;Scheduling)&amp;gt; &lt;br&gt;-&amp;nbsp;최소&amp;nbsp;탐색&amp;nbsp;시간&amp;nbsp;우선 &lt;br&gt;-&amp;nbsp;현재&amp;nbsp;디스크&amp;nbsp;헤드&amp;nbsp;위치에서&amp;nbsp;가장&amp;nbsp;가까운&amp;nbsp;요청을&amp;nbsp;먼저&amp;nbsp;처리 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;헤더에서&amp;nbsp;멀리&amp;nbsp;있는&amp;nbsp;요청은&amp;nbsp;기아&amp;nbsp;상태&amp;nbsp;발생&amp;nbsp;가능 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;seek&amp;nbsp;time이&amp;nbsp;최소이긴&amp;nbsp;하지만&amp;nbsp;가장&amp;nbsp;최적이라고&amp;nbsp;할&amp;nbsp;수는&amp;nbsp;없음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;대화식&amp;nbsp;처리&amp;nbsp;시스템의&amp;nbsp;경우&amp;nbsp;불확실한&amp;nbsp;예측&amp;nbsp;가능시간&amp;nbsp;때문에&amp;nbsp;부적당 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;바깥쪽&amp;nbsp;실린더에&amp;nbsp;대한&amp;nbsp;요청들은&amp;nbsp;오래&amp;nbsp;대기할&amp;nbsp;수&amp;nbsp;있음&amp;nbsp;-&amp;gt;&amp;nbsp;응답&amp;nbsp;편차가&amp;nbsp;큼 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;배치&amp;nbsp;처리&amp;nbsp;시스템의&amp;nbsp;경우&amp;nbsp;적용&amp;nbsp;가능&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zEaYk/btsHNeIMsG4/3WJUY2rtIOavXtDUVRNo80/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zEaYk/btsHNeIMsG4/3WJUY2rtIOavXtDUVRNo80/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zEaYk/btsHNeIMsG4/3WJUY2rtIOavXtDUVRNo80/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEaYk%2FbtsHNeIMsG4%2F3WJUY2rtIOavXtDUVRNo80%2Fimg.jpg&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;1116&quot; height=&quot;809&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;809&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;SCAN&amp;nbsp;Scheduling&amp;gt; &lt;br&gt;-&amp;nbsp;=엘리베이터&amp;nbsp;알고리즘(Elevator&amp;nbsp;algorithm) &lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;헤드가&amp;nbsp;한쪽&amp;nbsp;끝에서&amp;nbsp;다른&amp;nbsp;끝으로&amp;nbsp;이동해가며&amp;nbsp;요청을&amp;nbsp;처리 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;끝에&amp;nbsp;도달하면&amp;nbsp;반대&amp;nbsp;방향으로&amp;nbsp;이동 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;새&amp;nbsp;요청이, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;헤드&amp;nbsp;진행&amp;nbsp;방향에&amp;nbsp;생기면&amp;nbsp;즉시&amp;nbsp;처리 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;헤드&amp;nbsp;진행&amp;nbsp;방향&amp;nbsp;뒤에&amp;nbsp;생기면&amp;nbsp;되돌아&amp;nbsp;올&amp;nbsp;때&amp;nbsp;처리 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;SSTF에&amp;nbsp;비해&amp;nbsp;균등한&amp;nbsp;입출력&amp;nbsp;서비스 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;단,&amp;nbsp;양끝쪽&amp;nbsp;실린더&amp;nbsp;요청들은&amp;nbsp;중간보다&amp;nbsp;선택될&amp;nbsp;확률이&amp;nbsp;낮음&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;805&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t4I0p/btsHNtlpTbq/Y2inqq6EqkHVgWArfFz29k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4I0p/btsHNtlpTbq/Y2inqq6EqkHVgWArfFz29k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4I0p/btsHNtlpTbq/Y2inqq6EqkHVgWArfFz29k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4I0p%2FbtsHNtlpTbq%2FY2inqq6EqkHVgWArfFz29k%2Fimg.jpg&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;1107&quot; height=&quot;805&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;805&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Look Scheduling&amp;gt; &lt;br&gt;-&amp;nbsp;진행&amp;nbsp;방향에&amp;nbsp;요청이&amp;nbsp;없으면&amp;nbsp;바로&amp;nbsp;방향전환 &lt;br&gt;&amp;nbsp;-&amp;nbsp;SCAN의&amp;nbsp;변형 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;한쪽&amp;nbsp;방향&amp;nbsp;마지막&amp;nbsp;요청에&amp;nbsp;도달하면&amp;nbsp;반대로&amp;nbsp;이동 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;맨&amp;nbsp;끝&amp;nbsp;실린더로&amp;nbsp;이동하면&amp;nbsp;SCAN의&amp;nbsp;단점&amp;nbsp;보완&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1103&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X55TL/btsHMcZbUne/JKu6Wvlr5BFUftGNq40pbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X55TL/btsHMcZbUne/JKu6Wvlr5BFUftGNq40pbK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X55TL/btsHMcZbUne/JKu6Wvlr5BFUftGNq40pbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX55TL%2FbtsHMcZbUne%2FJKu6Wvlr5BFUftGNq40pbK%2Fimg.jpg&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;1103&quot; height=&quot;804&quot; data-origin-width=&quot;1103&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;C-SCAN(Circular-SCAN)&amp;nbsp;Scheduling&amp;gt; &lt;br&gt;-&amp;nbsp;순환&amp;nbsp;스캔 &lt;br&gt;-&amp;nbsp;SCAN보다&amp;nbsp;좀&amp;nbsp;더&amp;nbsp;균등한&amp;nbsp;요청&amp;nbsp;시간을&amp;nbsp;제공 &lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;헤드가&amp;nbsp;한쪽&amp;nbsp;끝에서&amp;nbsp;다른&amp;nbsp;끝으로&amp;nbsp;이동해가며&amp;nbsp;요청을&amp;nbsp;처리 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;끝에&amp;nbsp;도달하면&amp;nbsp;즉시&amp;nbsp;시작&amp;nbsp;위치로&amp;nbsp;돌아감 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;방금&amp;nbsp;처리가&amp;nbsp;끝난쪽보다는&amp;nbsp;반대쪽&amp;nbsp;끝에&amp;nbsp;처리될&amp;nbsp;요청들이&amp;nbsp;대기중일&amp;nbsp;확률이&amp;nbsp;높으므로 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj7uY1/btsHMzmijgP/yFsGOJnvtTGd2Fwu0CNNt0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj7uY1/btsHMzmijgP/yFsGOJnvtTGd2Fwu0CNNt0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj7uY1/btsHMzmijgP/yFsGOJnvtTGd2Fwu0CNNt0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj7uY1%2FbtsHMzmijgP%2FyFsGOJnvtTGd2Fwu0CNNt0%2Fimg.jpg&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;1107&quot; height=&quot;807&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;C-LOOK&amp;nbsp;Scheduling&amp;gt; &lt;br&gt;-&amp;nbsp;진행&amp;nbsp;방향에&amp;nbsp;요청이&amp;nbsp;없으면&amp;nbsp;바로&amp;nbsp;방향전환 &lt;br&gt;-&amp;nbsp;C-SCAN의&amp;nbsp;변형 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;한쪽&amp;nbsp;방향&amp;nbsp;마지막&amp;nbsp;요청에&amp;nbsp;도달하면,&amp;nbsp;다른쪽&amp;nbsp;끝방향&amp;nbsp;마지막&amp;nbsp;요청으로&amp;nbsp;이동&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfHBe7/btsHMBka9Cr/8B0d7S8zJduhz1rcKRoDVk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfHBe7/btsHMBka9Cr/8B0d7S8zJduhz1rcKRoDVk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfHBe7/btsHMBka9Cr/8B0d7S8zJduhz1rcKRoDVk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfHBe7%2FbtsHMBka9Cr%2F8B0d7S8zJduhz1rcKRoDVk%2Fimg.jpg&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;1111&quot; height=&quot;815&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;815&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;디스크&amp;nbsp;스케줄링&amp;nbsp;알고리즘&amp;nbsp;특성&amp;nbsp;비교&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/96yas/btsHOkH1961/EpZxuNjQuC907JKcYzIEH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/96yas/btsHOkH1961/EpZxuNjQuC907JKcYzIEH1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/96yas/btsHOkH1961/EpZxuNjQuC907JKcYzIEH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F96yas%2FbtsHOkH1961%2FEpZxuNjQuC907JKcYzIEH1%2Fimg.jpg&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;810&quot; height=&quot;491&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Disk&amp;nbsp;Scheduling&amp;nbsp;Algorith의&amp;nbsp;선택&amp;gt; &lt;br&gt;-&amp;nbsp;성능은&amp;nbsp;요청의&amp;nbsp;형태와&amp;nbsp;회수에&amp;nbsp;좌우됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디스크&amp;nbsp;요청은&amp;nbsp;파일&amp;nbsp;할당에&amp;nbsp;영향&amp;nbsp;받음 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;연속&amp;nbsp;할당된&amp;nbsp;파일&amp;nbsp;&amp;lt;=&amp;gt;&amp;nbsp;산재되어&amp;nbsp;할당된&amp;nbsp;파일 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디렉터리와&amp;nbsp;인덱스&amp;nbsp;블록의&amp;nbsp;위치가&amp;nbsp;중요 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;빈번한&amp;nbsp;접근이&amp;nbsp;발생하기에 &lt;br&gt;&lt;br&gt;-&amp;nbsp;일반적으로&amp;nbsp;SSTF나&amp;nbsp;LOOK이&amp;nbsp;무난함 &lt;br&gt;-&amp;nbsp;SCAN/C-SCAN은&amp;nbsp;디스크를&amp;nbsp;많이&amp;nbsp;사용하는&amp;nbsp;시스템에&amp;nbsp;적합 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Disk&amp;nbsp;Scheduling의&amp;nbsp;책임&amp;gt; &lt;br&gt;-&amp;nbsp;OS와&amp;nbsp;분리된&amp;nbsp;모듈로&amp;nbsp;구현되어야&amp;nbsp;더&amp;nbsp;나은&amp;nbsp;알고리즘으로&amp;nbsp;대체될&amp;nbsp;수&amp;nbsp;있다 &lt;br&gt;-&amp;nbsp;디스크&amp;nbsp;I/O&amp;nbsp;성능만&amp;nbsp;본다면,&amp;nbsp;스케줄링에&amp;nbsp;관한&amp;nbsp;책임을&amp;nbsp;하드웨어에게&amp;nbsp;일임이&amp;nbsp;바람직 &lt;br&gt;-&amp;nbsp;하지만,&amp;nbsp;성능&amp;nbsp;이외의&amp;nbsp;몇가지&amp;nbsp;고려사항&amp;nbsp;때문에&amp;nbsp;OS가&amp;nbsp;간섭해야&amp;nbsp;한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;I/O&amp;nbsp;작업&amp;nbsp;간의&amp;nbsp;우선순위 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;페이징&amp;nbsp;관련&amp;nbsp;입출력&amp;nbsp;&amp;gt;&amp;nbsp;일반&amp;nbsp;입출력 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디렉터리&amp;nbsp;정보&amp;nbsp;갱신&amp;nbsp;&amp;gt;&amp;nbsp;파일&amp;nbsp;내용&amp;nbsp;입출력&lt;/p&gt;</description>
      <category>운영체제</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/215</guid>
      <comments>https://gotjs815.tistory.com/215#entry215comment</comments>
      <pubDate>Tue, 4 Jun 2024 00:24:49 +0900</pubDate>
    </item>
    <item>
      <title>구조 기반 테스트</title>
      <link>https://gotjs815.tistory.com/214</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;구조&amp;nbsp;기반&amp;nbsp;테스트란?&amp;gt; &lt;br&gt;-&amp;nbsp;&amp;nbsp;화이트박스&amp;nbsp;테스트&amp;nbsp;케이스&amp;nbsp;설계 &lt;br&gt;-&amp;nbsp;프로그램&amp;nbsp;결함&amp;nbsp;식별을&amp;nbsp;목적으로&amp;nbsp;프로그램&amp;nbsp;&amp;nbsp;코드로부터&amp;nbsp;생성&amp;nbsp;되는&amp;nbsp;여러&amp;nbsp;정보(제어흐름정보,&amp;nbsp;자료흐름정보,&amp;nbsp;조건등을&amp;nbsp;이용하여&amp;nbsp;테스트&amp;nbsp;케이스를&amp;nbsp;설계하는&amp;nbsp;방법 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;구조&amp;nbsp;기반&amp;nbsp;테스트/구조&amp;nbsp;커버리지&amp;nbsp;분석의&amp;nbsp;종류&amp;gt; &lt;br&gt;-&amp;nbsp;Statement&amp;nbsp;Testing(문장&amp;nbsp;테스팅) &lt;br&gt;-&amp;nbsp;Branch&amp;nbsp;Testing(분기&amp;nbsp;테스팅) &lt;br&gt;-&amp;nbsp;Decision&amp;nbsp;Testing(결정&amp;nbsp;테스팅) &lt;br&gt;-&amp;nbsp;Condition&amp;nbsp;Testing(조건&amp;nbsp;테스팅) &lt;br&gt;-&amp;nbsp;Branch&amp;nbsp;Condition&amp;nbsp;Testing(분기&amp;nbsp;조건&amp;nbsp;테스팅) &lt;br&gt;-&amp;nbsp;Multiple&amp;nbsp;Condition&amp;nbsp;Testing(다중조건&amp;nbsp;테스팅) &lt;br&gt;-&amp;nbsp;MC/DC(Modified&amp;nbsp;Condition/Decision&amp;nbsp;Coverage) &lt;br&gt;-&amp;nbsp;기본&amp;nbsp;경로&amp;nbsp;테스트(Basis&amp;nbsp;path&amp;nbsp;test) &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;문장&amp;nbsp;테스팅&amp;gt; &lt;br&gt;-&amp;nbsp;테스트하려는&amp;nbsp;프로그램&amp;nbsp;내의&amp;nbsp;모든&amp;nbsp;&amp;nbsp;문장들을&amp;nbsp;'적어도&amp;nbsp;한번&amp;nbsp;이상'&amp;nbsp;실행하도록&amp;nbsp;요구하는&amp;nbsp;테스트&amp;nbsp;케이스&amp;nbsp;설계&amp;nbsp;방법 &lt;br&gt;-&amp;nbsp;&amp;nbsp;가장&amp;nbsp;기본적인&amp;nbsp;구조기반/화이트&amp;nbsp;박스&amp;nbsp;테스트 &lt;br&gt;-&amp;nbsp;100%의&amp;nbsp;문장&amp;nbsp;커버리지:&amp;nbsp;프로그램&amp;nbsp;내의&amp;nbsp;모든&amp;nbsp;문장들을&amp;nbsp;적어도&amp;nbsp;한번씩&amp;nbsp;접근하여&amp;nbsp;테스트 &lt;br&gt;-&amp;nbsp;제어&amp;nbsp;흐름&amp;nbsp;그래프의&amp;nbsp;모든&amp;nbsp;블록이&amp;nbsp;수행되면&amp;nbsp;당연히&amp;nbsp;프로그램의&amp;nbsp;모든&amp;nbsp;문장들이&amp;nbsp;수행되었음을&amp;nbsp;의미 &lt;br&gt;-&amp;nbsp;테스트&amp;nbsp;커버리지&amp;nbsp;아이템:&amp;nbsp;문장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;문장&amp;nbsp;커버리지&amp;nbsp;=&amp;nbsp;#&amp;nbsp;of&amp;nbsp;executed&amp;nbsp;statements/#&amp;nbsp;of&amp;nbsp;total&amp;nbsp;statements &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;절차&amp;gt; &lt;br&gt;(1)&amp;nbsp;테스트&amp;nbsp;대상&amp;nbsp;프로그램에&amp;nbsp;해당하는&amp;nbsp;제어&amp;nbsp;흐름&amp;nbsp;그래프를&amp;nbsp;작성한다 &lt;br&gt;(2)&amp;nbsp;모든&amp;nbsp;실행&amp;nbsp;가능한&amp;nbsp;기본&amp;nbsp;블록들을&amp;nbsp;지나가는&amp;nbsp;프로그램&amp;nbsp;경로&amp;nbsp;집합을&amp;nbsp;식별한다 &lt;br&gt;(3)&amp;nbsp;프로그램&amp;nbsp;경로&amp;nbsp;집합에&amp;nbsp;있는&amp;nbsp;각&amp;nbsp;프로그램&amp;nbsp;경로에&amp;nbsp;대해&amp;nbsp;다음을&amp;nbsp;수행한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;A.&amp;nbsp;경로를&amp;nbsp;실행하는&amp;nbsp;입력&amp;nbsp;데이터를&amp;nbsp;식별한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;B.&amp;nbsp;명세&amp;nbsp;등으로부터&amp;nbsp;해당&amp;nbsp;입력에&amp;nbsp;대한&amp;nbsp;기대&amp;nbsp;출력(expected&amp;nbsp;output)을&amp;nbsp;식별한다 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;예제&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uijMk/btsHM6jF7aV/c9z08Sbk02PI13gt7RxUSK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uijMk/btsHM6jF7aV/c9z08Sbk02PI13gt7RxUSK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uijMk/btsHM6jF7aV/c9z08Sbk02PI13gt7RxUSK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuijMk%2FbtsHM6jF7aV%2Fc9z08Sbk02PI13gt7RxUSK%2Fimg.jpg&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;797&quot; height=&quot;443&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6RrAH/btsHNuEAFLN/HyqwAJKL5cksQGwfCEkbH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6RrAH/btsHNuEAFLN/HyqwAJKL5cksQGwfCEkbH0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6RrAH/btsHNuEAFLN/HyqwAJKL5cksQGwfCEkbH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6RrAH%2FbtsHNuEAFLN%2FHyqwAJKL5cksQGwfCEkbH0%2Fimg.jpg&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;798&quot; height=&quot;400&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rcSJ7/btsHNFMDKZJ/c0bKk5NH80OjRSjhtz9oG1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rcSJ7/btsHNFMDKZJ/c0bKk5NH80OjRSjhtz9oG1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rcSJ7/btsHNFMDKZJ/c0bKk5NH80OjRSjhtz9oG1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrcSJ7%2FbtsHNFMDKZJ%2Fc0bKk5NH80OjRSjhtz9oG1%2Fimg.jpg&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;418&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WOyIq/btsHOj99OkK/IFXPuhQbfDYxOkLo8a1NUK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WOyIq/btsHOj99OkK/IFXPuhQbfDYxOkLo8a1NUK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WOyIq/btsHOj99OkK/IFXPuhQbfDYxOkLo8a1NUK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWOyIq%2FbtsHOj99OkK%2FIFXPuhQbfDYxOkLo8a1NUK%2Fimg.jpg&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;505&quot; height=&quot;285&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Zeoy/btsHNqhUQnw/WF0aJRBcDDskQKCMQynws1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Zeoy/btsHNqhUQnw/WF0aJRBcDDskQKCMQynws1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Zeoy/btsHNqhUQnw/WF0aJRBcDDskQKCMQynws1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Zeoy%2FbtsHNqhUQnw%2FWF0aJRBcDDskQKCMQynws1%2Fimg.jpg&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;716&quot; height=&quot;396&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;생각해봅시다&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ydoct/btsHNrVsmqK/YtQ3CtKpQBEJRxzUW1mMIK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ydoct/btsHNrVsmqK/YtQ3CtKpQBEJRxzUW1mMIK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ydoct/btsHNrVsmqK/YtQ3CtKpQBEJRxzUW1mMIK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fydoct%2FbtsHNrVsmqK%2FYtQ3CtKpQBEJRxzUW1mMIK%2Fimg.jpg&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;775&quot; height=&quot;419&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;문장&amp;nbsp;테스팅&amp;nbsp;문제&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEqFRN/btsHMwb3OPd/pbIEvu18mkTKzIjdqYiAL0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEqFRN/btsHMwb3OPd/pbIEvu18mkTKzIjdqYiAL0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEqFRN/btsHMwb3OPd/pbIEvu18mkTKzIjdqYiAL0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEqFRN%2FbtsHMwb3OPd%2FpbIEvu18mkTKzIjdqYiAL0%2Fimg.jpg&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;714&quot; height=&quot;429&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;분기(Branch)&amp;nbsp;테스팅&amp;gt; &lt;br&gt;-&amp;nbsp;분기&amp;nbsp;테스팅은&amp;nbsp;프로그램을&amp;nbsp;제어&amp;nbsp;흐름&amp;nbsp;그래프로&amp;nbsp;변환했을&amp;nbsp;때&amp;nbsp;'제어&amp;nbsp;흐름&amp;nbsp;그래프의&amp;nbsp;모든&amp;nbsp;간선을&amp;nbsp;최소한&amp;nbsp;한&amp;nbsp;번은&amp;nbsp;실행'하는&amp;nbsp;테스트&amp;nbsp;케이스가&amp;nbsp;테스트&amp;nbsp;케이스&amp;nbsp;집합에&amp;nbsp;포함되도록&amp;nbsp;요구 &lt;br&gt;-&amp;nbsp;테스트&amp;nbsp;커버리지&amp;nbsp;아이템:&amp;nbsp;분기&amp;nbsp;또는&amp;nbsp;간선&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v2VRo/btsHOjoMCoC/VWtqQz4Bxy5g9rECS9NoWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v2VRo/btsHOjoMCoC/VWtqQz4Bxy5g9rECS9NoWK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v2VRo/btsHOjoMCoC/VWtqQz4Bxy5g9rECS9NoWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv2VRo%2FbtsHOjoMCoC%2FVWtqQz4Bxy5g9rECS9NoWK%2Fimg.jpg&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;797&quot; height=&quot;443&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WsZ1Z/btsHMLz8rv8/WDkA1oM2KlKqb6JmrcRWv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WsZ1Z/btsHMLz8rv8/WDkA1oM2KlKqb6JmrcRWv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WsZ1Z/btsHMLz8rv8/WDkA1oM2KlKqb6JmrcRWv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWsZ1Z%2FbtsHMLz8rv8%2FWDkA1oM2KlKqb6JmrcRWv0%2Fimg.jpg&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;785&quot; height=&quot;369&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;생각해봅시다&amp;gt; &lt;br&gt;-&amp;nbsp;문장&amp;nbsp;커버리지를&amp;nbsp;만족하면&amp;nbsp;분기&amp;nbsp;커버리지를&amp;nbsp;만족하는가?&amp;nbsp;X,&amp;nbsp;모든&amp;nbsp;노드들이&amp;nbsp;실행됐다고해서&amp;nbsp;모든&amp;nbsp;간선들이&amp;nbsp;실행되는것이&amp;nbsp;아니다 &lt;br&gt;-&amp;nbsp;분기&amp;nbsp;커버리지를&amp;nbsp;만족하면&amp;nbsp;문장&amp;nbsp;커버리지를&amp;nbsp;만족하는가?&amp;nbsp;O,&amp;nbsp;분기&amp;nbsp;커버리지를&amp;nbsp;만족하면&amp;nbsp;문장&amp;nbsp;커버리지를&amp;nbsp;만족한다 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;결정(Decision)&amp;nbsp;테스팅&amp;gt; &lt;br&gt;-&amp;nbsp;프로그램의&amp;nbsp;모든&amp;nbsp;결정들에&amp;nbsp;대해&amp;nbsp;모든&amp;nbsp;가능한&amp;nbsp;결과를&amp;nbsp;가져올&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;테스트&amp;nbsp;케이스&amp;nbsp;집합을&amp;nbsp;설계한다.&amp;nbsp; &lt;br&gt;-&amp;nbsp;각&amp;nbsp;결정이&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;경우는&amp;nbsp;‘true’와&amp;nbsp;‘false’이므로&amp;nbsp;프로그램의&amp;nbsp;각&amp;nbsp;결정&amp;nbsp;에&amp;nbsp;대해&amp;nbsp;&amp;nbsp;‘true’와&amp;nbsp;‘false’가&amp;nbsp;산출될&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;하는&amp;nbsp;테스트&amp;nbsp;케이스가&amp;nbsp;최소한&amp;nbsp;1개&amp;nbsp;포함되어&amp;nbsp;있어야&amp;nbsp;한다.&amp;nbsp; &lt;br&gt;-&amp;nbsp;테스트&amp;nbsp;커버리지&amp;nbsp;아이템:&amp;nbsp;결정이&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;모든&amp;nbsp;값(true/false) &lt;br&gt;&amp;nbsp;&amp;nbsp;즉&amp;nbsp;하나의&amp;nbsp;결정에&amp;nbsp;두개의&amp;nbsp;테스트&amp;nbsp;커버리지&amp;nbsp;아이템(true가&amp;nbsp;되는&amp;nbsp;경우와&amp;nbsp;false가&amp;nbsp;되는&amp;nbsp;경우)이&amp;nbsp;있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;결정과&amp;nbsp;조건&amp;gt; &lt;br&gt;-&amp;nbsp;조건:&amp;nbsp;NOT을&amp;nbsp;제외한&amp;nbsp;AND,&amp;nbsp;OR&amp;nbsp;등의&amp;nbsp;논리&amp;nbsp;연산자가&amp;nbsp;없는&amp;nbsp;조건 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;기본&amp;nbsp;조건식을&amp;nbsp;그냥&amp;nbsp;조건&amp;nbsp;또는&amp;nbsp;‘clause’라고도&amp;nbsp;한다. &lt;br&gt;-&amp;nbsp;결정&amp;nbsp;:&amp;nbsp;조건이나&amp;nbsp;조건이&amp;nbsp;AND,&amp;nbsp;OR등의&amp;nbsp;논리&amp;nbsp;연산자로&amp;nbsp;관계&amp;nbsp;되어&amp;nbsp;있음&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yfeAc/btsHOfmqDqu/J5XtSUcCjmm443FrkKxBb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yfeAc/btsHOfmqDqu/J5XtSUcCjmm443FrkKxBb0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yfeAc/btsHOfmqDqu/J5XtSUcCjmm443FrkKxBb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyfeAc%2FbtsHOfmqDqu%2FJ5XtSUcCjmm443FrkKxBb0%2Fimg.jpg&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;604&quot; height=&quot;471&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Decision&amp;nbsp;Testing&amp;nbsp;vs.&amp;nbsp;Branch&amp;nbsp;Testing&amp;gt; &lt;br&gt;-&amp;nbsp;ISTQB에서는&amp;nbsp;결정&amp;nbsp;테스팅과&amp;nbsp;분기&amp;nbsp;테스팅을&amp;nbsp;구별하지&amp;nbsp;않지만 &lt;br&gt;-&amp;nbsp;ISO/IEC/IEEE&amp;nbsp;29119에서는&amp;nbsp;결정&amp;nbsp;테스팅과&amp;nbsp;분기&amp;nbsp;테스팅을&amp;nbsp;달리&amp;nbsp;정의한다.&amp;nbsp; &lt;br&gt;-&amp;nbsp;ISO/IEC/IEEE&amp;nbsp;29119에서&amp;nbsp;정의한&amp;nbsp;'분기&amp;nbsp;테스팅'은&amp;nbsp;프로그램을&amp;nbsp;제어&amp;nbsp;흐름&amp;nbsp;그래프로&amp;nbsp;표현했을&amp;nbsp;때&amp;nbsp;제어&amp;nbsp;흐름&amp;nbsp;그래프상의&amp;nbsp;분기(또는&amp;nbsp;간선)들을&amp;nbsp;최소한&amp;nbsp;한&amp;nbsp;번은&amp;nbsp;실행되기를&amp;nbsp;요구&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMSesu/btsHOjoMA9s/tV3B1z0KLEuF2wYoYNXIW0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMSesu/btsHOjoMA9s/tV3B1z0KLEuF2wYoYNXIW0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMSesu/btsHOjoMA9s/tV3B1z0KLEuF2wYoYNXIW0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMSesu%2FbtsHOjoMA9s%2FtV3B1z0KLEuF2wYoYNXIW0%2Fimg.jpg&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;674&quot; height=&quot;421&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Decision&amp;nbsp;Testing&amp;nbsp;=&amp;nbsp;Branch&amp;nbsp;Testing?&amp;gt; &lt;br&gt;-&amp;nbsp;결정문이&amp;nbsp;분기를&amp;nbsp;가지지&amp;nbsp;않은&amp;nbsp;경우에는&amp;nbsp;분기&amp;nbsp;테스팅(Branch&amp;nbsp;Testing)의&amp;nbsp;테스트케이스&amp;nbsp;집합과&amp;nbsp;결정&amp;nbsp;테스팅(Decision&amp;nbsp;Testing)의&amp;nbsp;테스트&amp;nbsp;케이스&amp;nbsp;집합이&amp;nbsp;동일하지&amp;nbsp;않을&amp;nbsp;수&amp;nbsp;있다&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Krsij/btsHMCi4yn9/Wav6ugsI94G1hkXlwgAKTk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Krsij/btsHMCi4yn9/Wav6ugsI94G1hkXlwgAKTk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Krsij/btsHMCi4yn9/Wav6ugsI94G1hkXlwgAKTk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKrsij%2FbtsHMCi4yn9%2FWav6ugsI94G1hkXlwgAKTk%2Fimg.jpg&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;497&quot; height=&quot;395&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 분기 테스팅을 만족?&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIob8P/btsHN1hBebu/C8W4wszXpPkPYBn0b8eST1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIob8P/btsHN1hBebu/C8W4wszXpPkPYBn0b8eST1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIob8P/btsHN1hBebu/C8W4wszXpPkPYBn0b8eST1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIob8P%2FbtsHN1hBebu%2FC8W4wszXpPkPYBn0b8eST1%2Fimg.jpg&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;625&quot; height=&quot;232&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;2. 결정&amp;nbsp; 테스팅을 만족?&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blL6P8/btsHNu5CCKi/V4GeKUbfDQmrMnY39gAKQ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blL6P8/btsHNu5CCKi/V4GeKUbfDQmrMnY39gAKQ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blL6P8/btsHNu5CCKi/V4GeKUbfDQmrMnY39gAKQ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblL6P8%2FbtsHNu5CCKi%2FV4GeKUbfDQmrMnY39gAKQ1%2Fimg.jpg&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;673&quot; height=&quot;286&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;lt;결정 테스팅&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bULBd4/btsHNymtaGa/Y7pOMt3EMrVMh5SlZkHhH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bULBd4/btsHNymtaGa/Y7pOMt3EMrVMh5SlZkHhH1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bULBd4/btsHNymtaGa/Y7pOMt3EMrVMh5SlZkHhH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbULBd4%2FbtsHNymtaGa%2FY7pOMt3EMrVMh5SlZkHhH1%2Fimg.jpg&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;628&quot; height=&quot;154&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>소프트웨어공학</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/214</guid>
      <comments>https://gotjs815.tistory.com/214#entry214comment</comments>
      <pubDate>Mon, 3 Jun 2024 22:22:13 +0900</pubDate>
    </item>
    <item>
      <title>가상메모리(2)</title>
      <link>https://gotjs815.tistory.com/212</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;요구&amp;nbsp;페이징의&amp;nbsp;필수&amp;nbsp;알고리즘&amp;gt; &lt;br&gt;-&amp;nbsp;성능에&amp;nbsp;크게&amp;nbsp;영향을&amp;nbsp;미침 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프레임&amp;nbsp;할당&amp;nbsp;알고리즘 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스&amp;nbsp;당&amp;nbsp;할당할&amp;nbsp;frame의&amp;nbsp;개수를&amp;nbsp;결정 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스의&amp;nbsp;작업&amp;nbsp;집합에&amp;nbsp;포함될&amp;nbsp;page들을&amp;nbsp;수용할만한&amp;nbsp;개수의&amp;nbsp;frame을&amp;nbsp;할당하여&amp;nbsp;페이지&amp;nbsp;부재를&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있도록 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;페이지&amp;nbsp;교체&amp;nbsp;알고리즘 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;페이지&amp;nbsp;부재가&amp;nbsp;발생했으나&amp;nbsp;빈&amp;nbsp;frame이&amp;nbsp;없는&amp;nbsp;경우&amp;nbsp;비울&amp;nbsp;frame을&amp;nbsp;결정 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;작업&amp;nbsp;집합에&amp;nbsp;속하지&amp;nbsp;않은&amp;nbsp;page가&amp;nbsp;담긴&amp;nbsp;frame을&amp;nbsp;선택해서&amp;nbsp;미래에&amp;nbsp;사용될&amp;nbsp;page가&amp;nbsp;교체되지&amp;nbsp;않도록&amp;nbsp;유지 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;최소&amp;nbsp;page&amp;nbsp;frame의&amp;nbsp;수&amp;gt; &lt;br&gt;-&amp;nbsp;각&amp;nbsp;프로세스&amp;nbsp;마다&amp;nbsp;실행에&amp;nbsp;필요한&amp;nbsp;최소&amp;nbsp;page&amp;nbsp;frame수가&amp;nbsp;확보되어야&amp;nbsp;한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Frame수&amp;nbsp;감소시&amp;nbsp;page&amp;nbsp;fault&amp;nbsp;rate&amp;nbsp;증가 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Page&amp;nbsp;fault&amp;nbsp;발생&amp;nbsp;시&amp;nbsp;instruction&amp;nbsp;cycle의&amp;nbsp;재실행&amp;nbsp;필요 &lt;br&gt;&lt;br&gt;-&amp;nbsp;한&amp;nbsp;instruction이&amp;nbsp;참조하는&amp;nbsp;모든&amp;nbsp;page는&amp;nbsp;동시에&amp;nbsp;메모리에&amp;nbsp;적재되어&amp;nbsp;있어야&amp;nbsp;한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;여러&amp;nbsp;page에&amp;nbsp;걸쳐있는&amp;nbsp;instruction/data &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;메모리&amp;nbsp;간접참조 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;할당할&amp;nbsp;적정&amp;nbsp;프레임&amp;nbsp;개수&amp;gt; &lt;br&gt;-&amp;nbsp;작업&amp;nbsp;집합을&amp;nbsp;약간&amp;nbsp;넘나드는&amp;nbsp;크기&amp;nbsp;정도&amp;nbsp;할당 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eBgPlb/btsHIK1YjV5/qcjS9YtBfSp97F8G0DKOJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eBgPlb/btsHIK1YjV5/qcjS9YtBfSp97F8G0DKOJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eBgPlb/btsHIK1YjV5/qcjS9YtBfSp97F8G0DKOJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeBgPlb%2FbtsHIK1YjV5%2FqcjS9YtBfSp97F8G0DKOJk%2Fimg.jpg&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;611&quot; height=&quot;434&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;프레임의&amp;nbsp;할당(Allocation&amp;nbsp;of&amp;nbsp;Frame)&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스&amp;nbsp;당&amp;nbsp;frame&amp;nbsp;수 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;최소&amp;nbsp;frame&amp;nbsp;수 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;컴퓨터(instruction&amp;nbsp;set)구조에&amp;nbsp;좌우됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;한&amp;nbsp;명령어&amp;nbsp;수행위해&amp;nbsp;참조하는&amp;nbsp;모든&amp;nbsp;페이지를&amp;nbsp;수용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;충분한&amp;nbsp;수의&amp;nbsp;프레임&amp;nbsp;존재&amp;nbsp;필요 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;최대&amp;nbsp;frame&amp;nbsp;수 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가용&amp;nbsp;메모리&amp;nbsp;용량에&amp;nbsp;의해&amp;nbsp;좌우됨 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;할당&amp;nbsp;알고리즘(Allocation&amp;nbsp;Algorithm)&amp;gt; &lt;br&gt;-&amp;nbsp;균등&amp;nbsp;할당(Equal&amp;nbsp;allocation) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;모든&amp;nbsp;프로세스들에게&amp;nbsp;같은&amp;nbsp;수의&amp;nbsp;frame을&amp;nbsp;할당 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;작은&amp;nbsp;size의&amp;nbsp;프로세스에게는&amp;nbsp;과할당&amp;nbsp;발생가능 &lt;br&gt;&lt;br&gt;-&amp;nbsp;비례&amp;nbsp;할당(Proportional&amp;nbsp;allocation) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스의&amp;nbsp;크기에&amp;nbsp;비례하여&amp;nbsp;할당 &lt;br&gt;&lt;br&gt;-&amp;nbsp;우선순위&amp;nbsp;할당(Priority&amp;nbsp;Allocation) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스의&amp;nbsp;우선순위에&amp;nbsp;따라&amp;nbsp;할당 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;더&amp;nbsp;높은&amp;nbsp;우선순위의&amp;nbsp;프로세스가&amp;nbsp;더&amp;nbsp;빨리&amp;nbsp;수행토록 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;참고&amp;nbsp;:&amp;nbsp;할당해야&amp;nbsp;할&amp;nbsp;최소&amp;nbsp;프레임의&amp;nbsp;수&amp;gt; &lt;br&gt;-&amp;nbsp;한&amp;nbsp;명령이&amp;nbsp;처리되는데&amp;nbsp;필요한&amp;nbsp;페이지수&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;CPU&amp;nbsp;명령어의&amp;nbsp;주소&amp;nbsp;모드(addressing&amp;nbsp;mode)에&amp;nbsp;좌우 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;참고&amp;nbsp;:&amp;nbsp;MS-윈도의&amp;nbsp;프레임&amp;nbsp;할당&amp;nbsp;예&amp;gt; &lt;br&gt;-&amp;nbsp;작업&amp;nbsp;집합의&amp;nbsp;이동으로&amp;nbsp;프로세스의&amp;nbsp;작업&amp;nbsp;집합&amp;nbsp;크기를&amp;nbsp;정확히&amp;nbsp;파악하기는&amp;nbsp;어려움 &lt;br&gt;-&amp;nbsp;윈도는&amp;nbsp;프로세스&amp;nbsp;생성시&amp;nbsp;최소/최대&amp;nbsp;할당&amp;nbsp;프레임&amp;nbsp;수를&amp;nbsp;정함 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;윈도&amp;nbsp;7에서는&amp;nbsp;최소&amp;nbsp;50개,&amp;nbsp;최대&amp;nbsp;345개 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;워킹셋(working&amp;nbsp;set)이라&amp;nbsp;부름 &lt;br&gt;&lt;br&gt;-&amp;nbsp;프로세스&amp;nbsp;생성&amp;nbsp;시&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;최소/최대&amp;nbsp;워킹셋&amp;nbsp;수가&amp;nbsp;예약됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스가&amp;nbsp;실행되면,&amp;nbsp;페이지&amp;nbsp;폴트&amp;nbsp;시&amp;nbsp;최수&amp;nbsp;수까지&amp;nbsp;메모리&amp;nbsp;할당할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;노력 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;기본적으로는&amp;nbsp;최대&amp;nbsp;수를&amp;nbsp;넘어서는&amp;nbsp;메모리&amp;nbsp;할당은&amp;nbsp;불허 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가용&amp;nbsp;메모리가&amp;nbsp;충분한&amp;nbsp;경우&amp;nbsp;큰&amp;nbsp;프로세스의&amp;nbsp;최대치를&amp;nbsp;증가 &lt;br&gt;&lt;br&gt;-&amp;nbsp;주기적으로 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;워킹셋&amp;nbsp;트리밍&amp;nbsp;알고리즘(working&amp;nbsp;set&amp;nbsp;trimming&amp;nbsp;algorithm)으로&amp;nbsp;시스템&amp;nbsp;메모리&amp;nbsp;사용량&amp;nbsp;스캔 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;일정&amp;nbsp;수준&amp;nbsp;이상&amp;nbsp;메모리가&amp;nbsp;사용되면&amp;nbsp;프로세스들의&amp;nbsp;워킹셋을&amp;nbsp;줄임(스왑-아웃&amp;nbsp;시킴) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가용&amp;nbsp;메모리를&amp;nbsp;확보할&amp;nbsp;때까지&amp;nbsp;계속됨 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;윈도의&amp;nbsp;작업&amp;nbsp;관리자&amp;gt; &lt;br&gt;-&amp;nbsp;메모리에&amp;nbsp;적재된&amp;nbsp;페이지의&amp;nbsp;크기를&amp;nbsp;나타냄 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;프로세스의&amp;nbsp;워킹셋이라&amp;nbsp;부름 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스의&amp;nbsp;전체&amp;nbsp;크기가&amp;nbsp;아님 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스의&amp;nbsp;모든&amp;nbsp;페이지가&amp;nbsp;적재된&amp;nbsp;것도&amp;nbsp;아님 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;가용&amp;nbsp;frame이&amp;nbsp;부족하다면?&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스의&amp;nbsp;일부&amp;nbsp;page를&amp;nbsp;디스크로부터&amp;nbsp;가져올&amp;nbsp;때 free&amp;nbsp;frame이&amp;nbsp;없다면? &lt;br&gt;&lt;br&gt;-&amp;nbsp;메모리에&amp;nbsp;적재된&amp;nbsp;page들&amp;nbsp;중&amp;nbsp;일부를&amp;nbsp;swap&amp;nbsp;area로&amp;nbsp;swap&amp;nbsp;out&amp;nbsp;해야함 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Page&amp;nbsp;fault&amp;nbsp;서비스&amp;nbsp;루틴에&amp;nbsp;페이지&amp;nbsp;교체&amp;nbsp;알고리즘을&amp;nbsp;포함시켜&amp;nbsp;메모리의&amp;nbsp;과할당&amp;nbsp;방지 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Page&amp;nbsp;fault를&amp;nbsp;최소화&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;알고리즘은?! &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Modify-bit(혹은&amp;nbsp;dirty-bit)를&amp;nbsp;사용하여&amp;nbsp;변경된&amp;nbsp;page만&amp;nbsp;swap-out &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;페이지&amp;nbsp;교체(Page&amp;nbsp;Replacement)&amp;gt; &lt;br&gt;-&amp;nbsp;메모리&amp;nbsp;frame&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;선택해&amp;nbsp;비우고,&amp;nbsp;이곳에&amp;nbsp;요청된&amp;nbsp;page를&amp;nbsp;적재하는&amp;nbsp;과정 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;페이지&amp;nbsp;폴트&amp;nbsp;핸들러에서&amp;nbsp;실행되는&amp;nbsp;작업 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;희생&amp;nbsp;페이지는&amp;nbsp;스왑-아웃,&amp;nbsp;요청&amp;nbsp;페이지는&amp;nbsp;스왑-인 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;희생&amp;nbsp;프레임(victim&amp;nbsp;frame)&amp;nbsp;:&amp;nbsp;비우기로&amp;nbsp;선택된&amp;nbsp;frame &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;희생&amp;nbsp;페이지(victim&amp;nbsp;page)&amp;nbsp;:&amp;nbsp;희생&amp;nbsp;frame에&amp;nbsp;들어&amp;nbsp;있는&amp;nbsp;page &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;작업&amp;nbsp;집합에&amp;nbsp;포함되지&amp;nbsp;않거나&amp;nbsp;가까운&amp;nbsp;미래에&amp;nbsp;참조되지&amp;nbsp;않을&amp;nbsp;page를&amp;nbsp;희생&amp;nbsp;page로&amp;nbsp;선택 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;페이지&amp;nbsp;부재&amp;nbsp;횟수를&amp;nbsp;줄임&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rMxFO/btsHI91lVRs/CcsIT1q6k5rUki3tKSHiKK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rMxFO/btsHI91lVRs/CcsIT1q6k5rUki3tKSHiKK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rMxFO/btsHI91lVRs/CcsIT1q6k5rUki3tKSHiKK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMxFO%2FbtsHI91lVRs%2FCcsIT1q6k5rUki3tKSHiKK%2Fimg.jpg&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;712&quot; height=&quot;419&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;기본적인&amp;nbsp;페이지&amp;nbsp;교체&amp;gt; &lt;br&gt;1.&amp;nbsp;디스크에서&amp;nbsp;필요한&amp;nbsp;page의&amp;nbsp;위치를&amp;nbsp;파악 &lt;br&gt;2.&amp;nbsp;Free&amp;nbsp;frame을&amp;nbsp;찾음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Free&amp;nbsp;frame이&amp;nbsp;있으면&amp;nbsp;그곳을&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;없으면&amp;nbsp;페이지&amp;nbsp;교체&amp;nbsp;알고리즘으로&amp;nbsp;희생될&amp;nbsp;frame(victim&amp;nbsp;frame)선정 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;(필요시)Victim&amp;nbsp;frame을&amp;nbsp;디스크에&amp;nbsp;기록 &lt;br&gt;&lt;br&gt;3.&amp;nbsp;Page를&amp;nbsp;디스크로부터&amp;nbsp;읽어&amp;nbsp;frame에&amp;nbsp;저장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;page/frame&amp;nbsp;table&amp;nbsp;수정 &lt;br&gt;&lt;br&gt;4.&amp;nbsp;프로세스&amp;nbsp;재실행 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;지역&amp;nbsp;교체와&amp;nbsp;전역&amp;nbsp;교체&amp;gt; &lt;br&gt;-&amp;nbsp;지역&amp;nbsp;교체(Local&amp;nbsp;replacement) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스는&amp;nbsp;자신이&amp;nbsp;사용중인&amp;nbsp;frame들&amp;nbsp;중에서만&amp;nbsp;교체&amp;nbsp;대상&amp;nbsp;frame을&amp;nbsp;선정 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스는&amp;nbsp;할당된&amp;nbsp;frame수&amp;nbsp;불변 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;잘&amp;nbsp;안쓰는&amp;nbsp;frame이&amp;nbsp;낭비 &lt;br&gt;&lt;br&gt;-&amp;nbsp;전역&amp;nbsp;교체(Global&amp;nbsp;replacement) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;전체&amp;nbsp;frame&amp;nbsp;중에서&amp;nbsp;교체&amp;nbsp;대상&amp;nbsp;frame을&amp;nbsp;선정 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스에&amp;nbsp;할당된&amp;nbsp;frame수가&amp;nbsp;변할&amp;nbsp;수&amp;nbsp;있음 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;다른&amp;nbsp;프로세스의&amp;nbsp;frame을&amp;nbsp;뺏어올&amp;nbsp;수도&amp;nbsp;있음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스는&amp;nbsp;자신이&amp;nbsp;page&amp;nbsp;fault&amp;nbsp;rate&amp;nbsp;조절&amp;nbsp;불가 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;같이&amp;nbsp;수행되는&amp;nbsp;다른&amp;nbsp;프로세스에&amp;nbsp;의해&amp;nbsp;영향받음&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;페이지&amp;nbsp;교체&amp;nbsp;알고리즘&amp;gt; &lt;br&gt;-&amp;nbsp;낮은&amp;nbsp;page&amp;nbsp;fault&amp;nbsp;rate이&amp;nbsp;요구됨 &lt;br&gt;&lt;br&gt;-&amp;nbsp;성능&amp;nbsp;평가 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;임의의&amp;nbsp;메모리&amp;nbsp;참조열(reference&amp;nbsp;string)에&amp;nbsp;대해&amp;nbsp;알고리즘을&amp;nbsp;적용하여&amp;nbsp;page&amp;nbsp;fault&amp;nbsp;회수&amp;nbsp;계산 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;reference&amp;nbsp;string &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;난수를&amp;nbsp;통한&amp;nbsp;임의&amp;nbsp;생성하거나&amp;nbsp;메모리&amp;nbsp;접근&amp;nbsp;기록을&amp;nbsp;로깅 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가정 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;frame&amp;nbsp;수&amp;nbsp;:&amp;nbsp;3개 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;reference&amp;nbsp;string&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;7&amp;nbsp;0&amp;nbsp;1&amp;nbsp;2&amp;nbsp;0&amp;nbsp;3&amp;nbsp;0&amp;nbsp;4&amp;nbsp;2&amp;nbsp;3&amp;nbsp;0&amp;nbsp;3&amp;nbsp;2&amp;nbsp;1&amp;nbsp;2&amp;nbsp;0&amp;nbsp;1&amp;nbsp;7&amp;nbsp;0&amp;nbsp;1 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Page&amp;nbsp;fault&amp;nbsp;횟수&amp;nbsp;vs.&amp;nbsp;frame&amp;nbsp;수&amp;gt;&amp;nbsp; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKMV5a/btsHHIKPQpd/lgKy9G1h8uLHbC0aJqu1D1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKMV5a/btsHHIKPQpd/lgKy9G1h8uLHbC0aJqu1D1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKMV5a/btsHHIKPQpd/lgKy9G1h8uLHbC0aJqu1D1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKMV5a%2FbtsHHIKPQpd%2FlgKy9G1h8uLHbC0aJqu1D1%2Fimg.jpg&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;645&quot; height=&quot;381&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;페이지&amp;nbsp;교체&amp;nbsp;알고리즘의&amp;nbsp;종류&amp;gt; &lt;br&gt;-&amp;nbsp;FIFO &lt;br&gt;-&amp;nbsp;Optimal&amp;nbsp;Algorithm(MIN) &lt;br&gt;-&amp;nbsp;LRU(Least&amp;nbsp;Recently&amp;nbsp;Used)&amp;nbsp;Algorithm &lt;br&gt;-&amp;nbsp;LRU&amp;nbsp;Approximation&amp;nbsp;Algorithm &lt;br&gt;-&amp;nbsp;CLOCK(FINUFO&amp;nbsp;:&amp;nbsp;First-In-Not-Used-First-Out) &lt;br&gt;-&amp;nbsp;Counting&amp;nbsp;Algorithm &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;LFU(Least&amp;nbsp;Frequently&amp;nbsp;Used)&amp;nbsp;Algorithm &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;MFU(Maximal&amp;nbsp;Frequently&amp;nbsp;Used)&amp;nbsp;Algorithm &lt;br&gt;-&amp;nbsp;LIFO(Last-In-First-Out)&amp;nbsp;Algorithm &lt;br&gt;-&amp;nbsp;Random&amp;nbsp;Algorithm &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;FIFO&amp;nbsp;페이지&amp;nbsp;교체&amp;gt; &lt;br&gt;-&amp;nbsp;First-In-First-Out &lt;br&gt;-&amp;nbsp;가장&amp;nbsp;오래된&amp;nbsp;page&amp;nbsp;frame을&amp;nbsp;교체 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;frame은&amp;nbsp;메모리에&amp;nbsp;적재되는&amp;nbsp;순서(시간)에&amp;nbsp;따라&amp;nbsp;순번이&amp;nbsp;매겨짐 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;FIFO&amp;nbsp;큐&amp;nbsp;이용 &lt;br&gt;-&amp;nbsp;가장&amp;nbsp;간단하며&amp;nbsp;구현이&amp;nbsp;용이 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;FIFO&amp;nbsp;Illustrating&amp;nbsp;Belady's&amp;nbsp;Anomaly&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oOJBC/btsHIW2eUjW/BeMudP3i4kp60i3cdARhv1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oOJBC/btsHIW2eUjW/BeMudP3i4kp60i3cdARhv1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oOJBC/btsHIW2eUjW/BeMudP3i4kp60i3cdARhv1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoOJBC%2FbtsHIW2eUjW%2FBeMudP3i4kp60i3cdARhv1%2Fimg.jpg&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;780&quot; height=&quot;486&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Optimal&amp;nbsp;Algorithm(MIN&amp;nbsp;Algorithm)&amp;gt; &lt;br&gt;-&amp;nbsp;최적&amp;nbsp;페이지&amp;nbsp;교체&amp;nbsp;알고리즘 &lt;br&gt;-&amp;nbsp;Belady에&amp;nbsp;의해&amp;nbsp;제안 &lt;br&gt;-&amp;nbsp;앞으로&amp;nbsp;가장&amp;nbsp;오랫동안&amp;nbsp;사용되지&amp;nbsp;않을&amp;nbsp;page&amp;nbsp;frame을&amp;nbsp;교체 &lt;br&gt;-&amp;nbsp;page&amp;nbsp;fault&amp;nbsp;횟수를&amp;nbsp;최소화&amp;nbsp;함 &lt;br&gt;-&amp;nbsp;비현실적 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;향후&amp;nbsp;프로그램&amp;nbsp;수행&amp;nbsp;예측은&amp;nbsp;불가능하기에 &lt;br&gt;-&amp;nbsp;다른&amp;nbsp;교체&amp;nbsp;알고리즘들의&amp;nbsp;성능&amp;nbsp;비교를&amp;nbsp;위한&amp;nbsp;기준으로&amp;nbsp;사용 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Optimal&amp;nbsp;Algorithm의&amp;nbsp;예&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3xskr/btsHJTKq7QA/QvgZSFkMx6aeGkMtAz0mj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3xskr/btsHJTKq7QA/QvgZSFkMx6aeGkMtAz0mj1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3xskr/btsHJTKq7QA/QvgZSFkMx6aeGkMtAz0mj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3xskr%2FbtsHJTKq7QA%2FQvgZSFkMx6aeGkMtAz0mj1%2Fimg.jpg&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;765&quot; height=&quot;370&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;최근&amp;nbsp;최소사용&amp;nbsp;알고리즘,&amp;nbsp;LRU(Least&amp;nbsp;Recently&amp;nbsp;Used)&amp;nbsp;Algorithm)&amp;gt; &lt;br&gt;-&amp;nbsp;가장&amp;nbsp;오랫동안&amp;nbsp;상되지&amp;nbsp;않은&amp;nbsp;page&amp;nbsp;frame을&amp;nbsp;교체&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;오랫동안&amp;nbsp;미사용&amp;nbsp;=&amp;nbsp;앞으로도&amp;nbsp;미사용 &lt;br&gt;-&amp;nbsp;일반적으로&amp;nbsp;좋은&amp;nbsp;성능 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Belady&amp;nbsp;모순&amp;nbsp;현상이&amp;nbsp;나타나지&amp;nbsp;않음 &lt;br&gt;-&amp;nbsp;각&amp;nbsp;page&amp;nbsp;frame마다&amp;nbsp;마지막&amp;nbsp;사용&amp;nbsp;기간&amp;nbsp;유지 &lt;br&gt;-&amp;nbsp;Age&amp;nbsp;counter&amp;nbsp;혹은&amp;nbsp;LRU&amp;nbsp;스택으로&amp;nbsp;구현 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;잦은&amp;nbsp;메모리&amp;nbsp;조작&amp;nbsp;발생 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;TLB&amp;nbsp;같은&amp;nbsp;하드웨어&amp;nbsp;지원&amp;nbsp;필요 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;LRU&amp;nbsp;Algorithm의&amp;nbsp;구현_1&amp;gt; &lt;br&gt;-&amp;nbsp;Age&amp;nbsp;Counter&amp;nbsp;사용 &lt;br&gt;-&amp;nbsp;각&amp;nbsp;page&amp;nbsp;frame마다&amp;nbsp;하나의&amp;nbsp;counter&amp;nbsp;설정 &lt;br&gt;-&amp;nbsp;각&amp;nbsp;page&amp;nbsp;frame이&amp;nbsp;참조될&amp;nbsp;때마다&amp;nbsp;참조&amp;nbsp;시간을&amp;nbsp;해당&amp;nbsp;pgae&amp;nbsp;frame의&amp;nbsp;counter에&amp;nbsp;복사 &lt;br&gt;-&amp;nbsp;교체&amp;nbsp;시&amp;nbsp;각&amp;nbsp;page&amp;nbsp;frame의&amp;nbsp;counter를&amp;nbsp;보고&amp;nbsp;가장&amp;nbsp;오래&amp;nbsp;전에&amp;nbsp;참조된&amp;nbsp;frame&amp;nbsp;선택 &lt;br&gt;-&amp;nbsp;Page&amp;nbsp;table에&amp;nbsp;접근이&amp;nbsp;필요 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;LRU&amp;nbsp;교체&amp;nbsp;page를&amp;nbsp;찾기&amp;nbsp;위해 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;매&amp;nbsp;메모리&amp;nbsp;참조시&amp;nbsp;마다&amp;nbsp;counter&amp;nbsp;갱신&amp;nbsp;위해 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;LRU&amp;nbsp;Algorithm의&amp;nbsp;예&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btO6Z1/btsHItM2oPD/8BhUkx3WZOraTlNakjOjsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btO6Z1/btsHItM2oPD/8BhUkx3WZOraTlNakjOjsK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btO6Z1/btsHItM2oPD/8BhUkx3WZOraTlNakjOjsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtO6Z1%2FbtsHItM2oPD%2F8BhUkx3WZOraTlNakjOjsK%2Fimg.jpg&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;824&quot; height=&quot;367&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;LRU&amp;nbsp;Algorithm의&amp;nbsp;구현_2&amp;gt; &lt;br&gt;-&amp;nbsp;&amp;nbsp;Strack에&amp;nbsp;page&amp;nbsp;번호&amp;nbsp;유지 &lt;br&gt;-&amp;nbsp;최근에&amp;nbsp;참조된&amp;nbsp;page&amp;nbsp;번호를&amp;nbsp;스택의&amp;nbsp;top에&amp;nbsp;위치&amp;nbsp;시킴 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;교체&amp;nbsp;대상이&amp;nbsp;되는&amp;nbsp;page는&amp;nbsp;스택의&amp;nbsp;bottom에서&amp;nbsp;얻음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;교체&amp;nbsp;대상을&amp;nbsp;찾기&amp;nbsp;위한&amp;nbsp;검색&amp;nbsp;불필요 &lt;br&gt;&lt;br&gt;-&amp;nbsp;이중&amp;nbsp;연결&amp;nbsp;리스트로&amp;nbsp;스택&amp;nbsp;구현 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스택&amp;nbsp;중간에서&amp;nbsp;항목&amp;nbsp;제거&amp;nbsp;위해 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;스택을 위한 page 참조의 기록&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Xa8U/btsHIdDB2em/Gjk8jfrSFJyUqnpzt0mGck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Xa8U/btsHIdDB2em/Gjk8jfrSFJyUqnpzt0mGck/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Xa8U/btsHIdDB2em/Gjk8jfrSFJyUqnpzt0mGck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Xa8U%2FbtsHIdDB2em%2FGjk8jfrSFJyUqnpzt0mGck%2Fimg.jpg&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;640&quot; height=&quot;416&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;LRU&amp;nbsp;근접&amp;nbsp;알고리즘(LRU&amp;nbsp;Approximation&amp;nbsp;Algorithm)&amp;gt; &lt;br&gt;-&amp;nbsp;LRU&amp;nbsp;page&amp;nbsp;교체&amp;nbsp;지원을&amp;nbsp;충분히&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;하드웨어는&amp;nbsp;거의&amp;nbsp;없음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;일반적으로&amp;nbsp;reference&amp;nbsp;bit(참조&amp;nbsp;비트)&amp;nbsp;형태로&amp;nbsp;어느&amp;nbsp;정도만&amp;nbsp;지원 &lt;br&gt;&lt;br&gt;-&amp;nbsp;Reference&amp;nbsp;bit &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;page&amp;nbsp;마다&amp;nbsp;할당,&amp;nbsp;초기에&amp;nbsp;OS에&amp;nbsp;의해&amp;nbsp;reset &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;page의&amp;nbsp;참조가&amp;nbsp;발생하면&amp;nbsp;set &lt;br&gt;=&amp;gt;&amp;nbsp;정확한&amp;nbsp;사용&amp;nbsp;순서는&amp;nbsp;알&amp;nbsp;수&amp;nbsp;없지만,&amp;nbsp;각&amp;nbsp;page의&amp;nbsp;참조&amp;nbsp;여부는&amp;nbsp;확인&amp;nbsp;가능 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;부가된&amp;nbsp;참조&amp;nbsp;비트&amp;nbsp;알고리즘(Additional&amp;nbsp;Reference&amp;nbsp;Bit&amp;nbsp;Algorithm)&amp;gt; &lt;br&gt;-&amp;nbsp;일정&amp;nbsp;시간&amp;nbsp;간격마다&amp;nbsp;참조&amp;nbsp;비트를&amp;nbsp;기록하여&amp;nbsp;대략적인&amp;nbsp;선후&amp;nbsp;관계를&amp;nbsp;알&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;함 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;타이머&amp;nbsp;인터럽트와&amp;nbsp;우측&amp;nbsp;쉬프트&amp;nbsp;레지시터&amp;nbsp;이용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;참조비트가&amp;nbsp;가장&amp;nbsp;작은&amp;nbsp;수의&amp;nbsp;페이지를&amp;nbsp;교체 &lt;br&gt;&lt;br&gt;-&amp;nbsp;ex)&amp;nbsp;각&amp;nbsp;page마다&amp;nbsp;8bit의&amp;nbsp;참조&amp;nbsp;비트를&amp;nbsp;할당 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;0000&amp;nbsp;0000&amp;nbsp;:&amp;nbsp;한&amp;nbsp;번도&amp;nbsp;참조&amp;nbsp;안됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1111&amp;nbsp;1111&amp;nbsp;:&amp;nbsp;각&amp;nbsp;간격마다&amp;nbsp;1번&amp;nbsp;이상씩&amp;nbsp;참조됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1100&amp;nbsp;0110(최근&amp;nbsp;사용)&amp;nbsp;&amp;gt;&amp;nbsp;0111&amp;nbsp;0111(교체&amp;nbsp;대상) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;교체대상&amp;nbsp;중&amp;nbsp;FIFO&amp;nbsp;적용하여&amp;nbsp;선택&amp;nbsp;가능 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;2차-기회&amp;nbsp;알고리즘(Second-Chance&amp;nbsp;Algorithm)&amp;gt; &lt;br&gt;-&amp;nbsp;Clock&amp;nbsp;Algorithm &lt;br&gt;-&amp;nbsp;FINUFO(First-In-Not-Used-First-Out)&amp;nbsp;Algorithm &lt;br&gt;-&amp;nbsp;기본은&amp;nbsp;FIFO&amp;nbsp;알고리즘&amp;nbsp;+&amp;nbsp;page&amp;nbsp;선택시&amp;nbsp;마다&amp;nbsp;참조&amp;nbsp;비트&amp;nbsp;확인 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;참조&amp;nbsp;비트&amp;nbsp;0&amp;nbsp;:&amp;nbsp;바로&amp;nbsp;교체 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;참조&amp;nbsp;비트&amp;nbsp;1&amp;nbsp;:&amp;nbsp;reset&amp;nbsp;후&amp;nbsp;한&amp;nbsp;번&amp;nbsp;더&amp;nbsp;기회&amp;nbsp;제공 &lt;br&gt;-&amp;nbsp;순환&amp;nbsp;큐와&amp;nbsp;포인터(P)를&amp;nbsp;이용하여&amp;nbsp;구현 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex) &lt;br&gt;if&amp;nbsp;USE(*P)&amp;nbsp;=&amp;nbsp;1&amp;nbsp;then &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;USE(*P)&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;P&amp;nbsp;=&amp;nbsp;P+1&amp;nbsp;until&amp;nbsp;finding&amp;nbsp;USE(*P)=0; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;REPLACE(*P);&amp;nbsp;P&amp;nbsp;=&amp;nbsp;P+1; &lt;br&gt;else&amp;nbsp;/*USE(*P)=0*/ &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;REPLACE(*P)&amp;nbsp;and&amp;nbsp;P&amp;nbsp;=&amp;nbsp;P+1; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;2차&amp;nbsp;기회&amp;nbsp;알고리즘의&amp;nbsp;예&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE7oVQ/btsHI975vjA/0vH7BNfOkKtoNm6swljwc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE7oVQ/btsHI975vjA/0vH7BNfOkKtoNm6swljwc1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE7oVQ/btsHI975vjA/0vH7BNfOkKtoNm6swljwc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE7oVQ%2FbtsHI975vjA%2F0vH7BNfOkKtoNm6swljwc1%2Fimg.jpg&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;611&quot; height=&quot;481&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Enhanced&amp;nbsp;Second-Chance&amp;nbsp;Algorithm&amp;gt; &lt;br&gt;-&amp;nbsp;Second-Chance&amp;nbsp;Algorithm&amp;nbsp;+&amp;nbsp;(참조/변경&amp;nbsp;비트) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;page&amp;nbsp;선택시&amp;nbsp;마다&amp;nbsp;등급&amp;nbsp;확인 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;디스크&amp;nbsp;입출력&amp;nbsp;회수&amp;nbsp;고려&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qz0MP/btsHIbly3Q5/oAGZFKTvPVenX1HiOKYkLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qz0MP/btsHIbly3Q5/oAGZFKTvPVenX1HiOKYkLk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qz0MP/btsHIbly3Q5/oAGZFKTvPVenX1HiOKYkLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqz0MP%2FbtsHIbly3Q5%2FoAGZFKTvPVenX1HiOKYkLk%2Fimg.jpg&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;724&quot; height=&quot;259&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Counting&amp;nbsp;Algorithms&amp;gt; &lt;br&gt;-&amp;nbsp;각&amp;nbsp;page&amp;nbsp;frame의&amp;nbsp;참조&amp;nbsp;회수를&amp;nbsp;counter에&amp;nbsp;유지 &lt;br&gt;-&amp;nbsp;LFU(Least&amp;nbsp;Frequently&amp;nbsp;Used)&amp;nbsp;Algorithm &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가장&amp;nbsp;작은&amp;nbsp;count&amp;nbsp;값을&amp;nbsp;가진&amp;nbsp;page&amp;nbsp;교체 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;적게&amp;nbsp;참조한&amp;nbsp;page는&amp;nbsp;참조될&amp;nbsp;가능성이&amp;nbsp;적다&amp;nbsp;가정 &lt;br&gt;&lt;br&gt;-&amp;nbsp;MFU(Maximal&amp;nbsp;Frequently&amp;nbsp;Used)&amp;nbsp;Algorithm &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;count&amp;nbsp;값을&amp;nbsp;가진&amp;nbsp;page를&amp;nbsp;교체 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;많이&amp;nbsp;참조한&amp;nbsp;page는&amp;nbsp;충분히&amp;nbsp;사용했다&amp;nbsp;가정 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가장&amp;nbsp;작은&amp;nbsp;count&amp;nbsp;값을&amp;nbsp;가진&amp;nbsp;page는&amp;nbsp;적재된지&amp;nbsp;얼마&amp;nbsp;되지&amp;nbsp;않아&amp;nbsp;더&amp;nbsp;사용할&amp;nbsp;가능성이&amp;nbsp;있따&amp;nbsp;가정&lt;/p&gt;</description>
      <category>운영체제</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/212</guid>
      <comments>https://gotjs815.tistory.com/212#entry212comment</comments>
      <pubDate>Thu, 30 May 2024 23:22:23 +0900</pubDate>
    </item>
    <item>
      <title>Spring data JPA</title>
      <link>https://gotjs815.tistory.com/211</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Data base&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-05-29 153014.png&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6obhI/btsHGTdHkZJ/HkW37YZbktpUd6FsOGhcq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6obhI/btsHGTdHkZJ/HkW37YZbktpUd6FsOGhcq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6obhI/btsHGTdHkZJ/HkW37YZbktpUd6FsOGhcq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6obhI%2FbtsHGTdHkZJ%2FHkW37YZbktpUd6FsOGhcq1%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;440&quot; height=&quot;472&quot; data-filename=&quot;스크린샷 2024-05-29 153014.png&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;472&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;JPA(Java&amp;nbsp;Persistence&amp;nbsp;API)&amp;gt; &lt;br /&gt;-&amp;nbsp;Java&amp;nbsp;프로그램에서&amp;nbsp;데이터를&amp;nbsp;영구적으로&amp;nbsp;저장할&amp;nbsp;때&amp;nbsp;사용하는&amp;nbsp;인터페이스 &lt;br /&gt;-&amp;nbsp;Java&amp;nbsp;진영에서&amp;nbsp;ORM(Object-Relaional&amp;nbsp;Mapping)기술&amp;nbsp;표준으로&amp;nbsp;사용하는&amp;nbsp;인터페이스&amp;nbsp;모음 &lt;br /&gt;-&amp;nbsp;자바&amp;nbsp;어플리케이션에서&amp;nbsp;관계형&amp;nbsp;데이터베이스를&amp;nbsp;사용하는&amp;nbsp;방식을&amp;nbsp;정의한&amp;nbsp;인터페이스 &lt;br /&gt;-&amp;nbsp;인터페이스이기&amp;nbsp;때문에&amp;nbsp;Hibernate,&amp;nbsp;Open&amp;nbsp;JPA등이&amp;nbsp;JPA를&amp;nbsp;구현 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;구조&amp;gt; &lt;br /&gt;-&amp;nbsp;외부에서&amp;nbsp;Controller를&amp;nbsp;호출하면&amp;nbsp;Repository가&amp;nbsp;Entity를&amp;nbsp;가지고&amp;nbsp;처리를&amp;nbsp;한&amp;nbsp;후에&amp;nbsp;반환하는&amp;nbsp;구조라고&amp;nbsp;보면&amp;nbsp;된다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Controller&amp;nbsp;&amp;gt;&amp;nbsp;Java&amp;nbsp;Logic&amp;nbsp;수행 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Entity&amp;nbsp;&amp;gt;&amp;nbsp;테이블&amp;nbsp;정보&amp;nbsp;설정 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Repository&amp;nbsp;&amp;gt;&amp;nbsp;쿼리&amp;nbsp;정보&amp;nbsp;설정 &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;JPA&amp;nbsp;Annotation&amp;gt; &lt;br /&gt;-&amp;nbsp;@Builder&amp;nbsp;:&amp;nbsp;SQL&amp;nbsp;사용&amp;nbsp;시&amp;nbsp;파라미터에&amp;nbsp;값을&amp;nbsp;쉽게&amp;nbsp;넣어주기&amp;nbsp;위한&amp;nbsp;어노테이션 &lt;br /&gt;-&amp;nbsp;@ToString&amp;nbsp;:&amp;nbsp;객체의&amp;nbsp;값&amp;nbsp;확인 &lt;br /&gt;-&amp;nbsp;@AllArgsConstructor,&amp;nbsp;@NoArgsConstructor&amp;nbsp;:&amp;nbsp;생성자를&amp;nbsp;자동&amp;nbsp;완성시켜준다(Lombok&amp;nbsp;필요) &lt;br /&gt;-&amp;nbsp;@Entity&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;class에&amp;nbsp;지정할&amp;nbsp;테이블명&amp;nbsp;입력 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;@ModelAttribute&amp;nbsp;:&amp;nbsp;Form&amp;nbsp;data &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex)name=Laptop&amp;amp;brand=Samsung&amp;amp;madeIn=Korea&amp;amp;price=1000.00를&amp;nbsp;Product&amp;nbsp;객체 &lt;br /&gt;-&amp;nbsp;@RequestBody&amp;nbsp;:&amp;nbsp;HTTP&amp;nbsp;요청&amp;nbsp;본문에&amp;nbsp;포함된 &lt;br /&gt;-&amp;nbsp;JSON&amp;nbsp;데이터 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex)&amp;nbsp;{&quot;name&quot;:&amp;nbsp;&quot;Laptop&quot;,&amp;nbsp;&quot;brand&quot;:&amp;nbsp;&quot;Samsung&quot;,&amp;nbsp;&quot;madeIn&quot;:&amp;nbsp;&quot;Korea&quot;,&amp;nbsp;&quot;price&quot;:&amp;nbsp;1000.00}를&amp;nbsp;Product&amp;nbsp;객체에&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;CRUD&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;crud.png&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHbozk/btsHGxhDwPG/Dp7gKeadfVVLNTxsfOcwGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHbozk/btsHGxhDwPG/Dp7gKeadfVVLNTxsfOcwGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHbozk/btsHGxhDwPG/Dp7gKeadfVVLNTxsfOcwGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHbozk%2FbtsHGxhDwPG%2FDp7gKeadfVVLNTxsfOcwGk%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;965&quot; height=&quot;757&quot; data-filename=&quot;crud.png&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;757&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>웹프레임워크</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/211</guid>
      <comments>https://gotjs815.tistory.com/211#entry211comment</comments>
      <pubDate>Wed, 29 May 2024 16:56:39 +0900</pubDate>
    </item>
    <item>
      <title>조합 테스팅</title>
      <link>https://gotjs815.tistory.com/210</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;조합&amp;nbsp;테스팅&amp;gt; &lt;br /&gt;-&amp;nbsp;조합&amp;nbsp;테스팅은&amp;nbsp;테스트&amp;nbsp;대상&amp;nbsp;프로그램의&amp;nbsp;동등&amp;nbsp;분할이나&amp;nbsp;BVA등을&amp;nbsp;통해&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;클래스들로&amp;nbsp;각&amp;nbsp;입력&amp;nbsp;인자를&amp;nbsp;여러&amp;nbsp;클래스나&amp;nbsp;값들로&amp;nbsp;분할하였을&amp;nbsp;때&amp;nbsp;이들을&amp;nbsp;조합하여&amp;nbsp;테스트&amp;nbsp;케이스를&amp;nbsp;구성하는&amp;nbsp;방식 &lt;br /&gt;-&amp;nbsp;예제&amp;nbsp;:&amp;nbsp;입력&amp;nbsp;x,y,z를&amp;nbsp;어떻게&amp;nbsp;조합하여&amp;nbsp;테스트&amp;nbsp;케이스를&amp;nbsp;만들것인가?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2024-05-29 235727.jpg&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBhWn2/btsHGeXgWnR/tHdUPMpMO9KZOMc1EvNcRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBhWn2/btsHGeXgWnR/tHdUPMpMO9KZOMc1EvNcRk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBhWn2/btsHGeXgWnR/tHdUPMpMO9KZOMc1EvNcRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBhWn2%2FbtsHGeXgWnR%2FtHdUPMpMO9KZOMc1EvNcRk%2Fimg.jpg&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;466&quot; height=&quot;162&quot; data-filename=&quot;화면 캡처 2024-05-29 235727.jpg&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;one-to-one&amp;nbsp;:&amp;nbsp;3+4+2=9개의&amp;nbsp;test&amp;nbsp;case &lt;br /&gt;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;minimized&amp;nbsp;:&amp;nbsp;4개 &lt;br /&gt;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;모든&amp;nbsp;입력&amp;nbsp;인자들&amp;nbsp;:&amp;nbsp;3*4*2=24 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;조합&amp;nbsp;테스팅&amp;nbsp;종류&amp;gt; &lt;br /&gt;-&amp;nbsp;Each&amp;nbsp;choice&amp;nbsp;테스팅(=minimized):&amp;nbsp;각&amp;nbsp;입력&amp;nbsp;인자의&amp;nbsp;분할된&amp;nbsp;클래스로부터&amp;nbsp;최소한&amp;nbsp;하나의&amp;nbsp;입력&amp;nbsp;값이&amp;nbsp;테스트케이스에&amp;nbsp;포함 &lt;br /&gt;-&amp;nbsp;페어와이즈&amp;nbsp;테스팅:&amp;nbsp;각&amp;nbsp;인자의&amp;nbsp;값(또는&amp;nbsp;클래스)과&amp;nbsp;다른&amp;nbsp;인자의&amp;nbsp;값(또는&amp;nbsp;클래스)를&amp;nbsp;최소한&amp;nbsp;한번은&amp;nbsp;조합하여&amp;nbsp;테스트&amp;nbsp;케이스를&amp;nbsp;구성 &lt;br /&gt;-&amp;nbsp;All&amp;nbsp;combinations&amp;nbsp;테스팅:&amp;nbsp;모든&amp;nbsp;입력&amp;nbsp;인자의&amp;nbsp;모든&amp;nbsp;가능한&amp;nbsp;클래스의&amp;nbsp;조합이&amp;nbsp;테스트&amp;nbsp;케이스들에&amp;nbsp;포함되도록&amp;nbsp;구성 &lt;br /&gt;-&amp;nbsp;Base&amp;nbsp;choice&amp;nbsp;테스팅:&amp;nbsp;기반이&amp;nbsp;되는&amp;nbsp;테스트&amp;nbsp;조합을&amp;nbsp;미리&amp;nbsp;선정한다.&amp;nbsp;기반&amp;nbsp;테스트는&amp;nbsp;사용자의&amp;nbsp;관점에서&amp;nbsp;가장&amp;nbsp;선택될&amp;nbsp;빈도가&amp;nbsp;높고,&amp;nbsp;일반적으로는&amp;nbsp;정상&amp;nbsp;동작할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;것을&amp;nbsp;선정하고&amp;nbsp;선정된&amp;nbsp;기반&amp;nbsp;테스트에서&amp;nbsp;하나의&amp;nbsp;인자에만&amp;nbsp;변경을&amp;nbsp;주고&amp;nbsp;나머지는&amp;nbsp;기반&amp;nbsp;테스트의&amp;nbsp;값으로&amp;nbsp;고정하여&amp;nbsp;테스트&amp;nbsp;케이스들을&amp;nbsp;생성 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;예제&amp;gt; &lt;br /&gt;[명세]&amp;nbsp;새우&amp;nbsp;버거와&amp;nbsp;닭고기&amp;nbsp;버거는&amp;nbsp;4000원,&amp;nbsp;소고기&amp;nbsp;버거는&amp;nbsp;5000원이다.&amp;nbsp; &lt;br /&gt;주문할&amp;nbsp;때&amp;nbsp;쿠폰을&amp;nbsp;사용하면&amp;nbsp;1000원&amp;nbsp;할인&amp;nbsp;가능하다.&amp;nbsp;또한&amp;nbsp;주문시간에&amp;nbsp;따라&amp;nbsp;할인이&amp;nbsp;가능하다. &lt;br /&gt;피크&amp;nbsp;타임은&amp;nbsp;오전11시~오후2시(11:00~13:59)이다.&amp;nbsp;피크&amp;nbsp;타임&amp;nbsp;외의&amp;nbsp;시간에&amp;nbsp;주문하면&amp;nbsp;500원&amp;nbsp;할인한다. &lt;br /&gt;All&amp;nbsp;combinations&amp;nbsp;:&amp;nbsp;3*2*2=12개 &lt;br /&gt;Each Choice(minimized) : 3개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*테스트&amp;nbsp;아이템&amp;nbsp;인자(Test&amp;nbsp;Item&amp;nbsp;Parameter)&amp;nbsp;:&amp;nbsp;프로그램&amp;nbsp;행위에&amp;nbsp;영향을&amp;nbsp;주는&amp;nbsp;인자&amp;nbsp;:&amp;nbsp;버거&amp;nbsp;종류,&amp;nbsp;주문&amp;nbsp;시간,&amp;nbsp;쿠폰&amp;nbsp;적용 &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;버거 예제.jpg&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP4LWA/btsHGUDXQCj/GKKlO842rFqgqOibiPTv31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP4LWA/btsHGUDXQCj/GKKlO842rFqgqOibiPTv31/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP4LWA/btsHGUDXQCj/GKKlO842rFqgqOibiPTv31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP4LWA%2FbtsHGUDXQCj%2FGKKlO842rFqgqOibiPTv31%2Fimg.jpg&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;699&quot; height=&quot;190&quot; data-filename=&quot;버거 예제.jpg&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;예제_1&amp;gt; &lt;br /&gt;[명세]&amp;nbsp;새우&amp;nbsp;버거와&amp;nbsp;닭고기&amp;nbsp;버거는&amp;nbsp;4000원,&amp;nbsp;소고기&amp;nbsp;버거는&amp;nbsp;5000원이다.&amp;nbsp; &lt;br /&gt;주문할&amp;nbsp;때&amp;nbsp;쿠폰을&amp;nbsp;사용하면&amp;nbsp;1000원&amp;nbsp;할인&amp;nbsp;가능하지만&amp;nbsp;피크&amp;nbsp;타임외의&amp;nbsp;시간에만&amp;nbsp;적용이&amp;nbsp;가능하다 &lt;br /&gt;피크&amp;nbsp;타임은&amp;nbsp;오전11시~오후2시(11:00~13:59)이다.&amp;nbsp;피크&amp;nbsp;타임&amp;nbsp;외의&amp;nbsp;시간에&amp;nbsp;주문하면&amp;nbsp;500원&amp;nbsp;할인한다. &lt;br /&gt;만약&amp;nbsp;주문시간에&amp;nbsp;따른&amp;nbsp;할인과&amp;nbsp;쿠폰이&amp;nbsp;동시에&amp;nbsp;적용되면&amp;nbsp;쿠폰에&amp;nbsp;따른&amp;nbsp;할인만&amp;nbsp;적용한다 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;예제&amp;nbsp;프로그램 &lt;br /&gt;public&amp;nbsp;class&amp;nbsp;BurgerShop2{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;public&amp;nbsp;int&amp;nbsp;getPrice(BurgerKind&amp;nbsp;burgerType,&amp;nbsp;LocalTime&amp;nbsp;orderTime,&amp;nbsp;boolean&amp;nbsp;couponApplied){ &lt;br /&gt;int&amp;nbsp;totalPrice&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;if(burgerType&amp;nbsp;==&amp;nbsp;BurgerKind.SHRIMP)&amp;nbsp;totalPrice&amp;nbsp;=&amp;nbsp;4000; &lt;br /&gt;if(burgerType&amp;nbsp;==&amp;nbsp;BurgerKind.CHICKEN)&amp;nbsp;totalPrice&amp;nbsp;=&amp;nbsp;4000; &lt;br /&gt;if(burgerType&amp;nbsp;==&amp;nbsp;BurgerKind.BEEP)&amp;nbsp;totalPrice&amp;nbsp;=&amp;nbsp;5000; &lt;br /&gt;&lt;br /&gt;LocalTime&amp;nbsp;startTime&amp;nbsp;=&amp;nbsp;LocalTime.of(hour:11,&amp;nbsp;minute:0,&amp;nbsp;second:0); &lt;br /&gt;LocalTime&amp;nbsp;endTime&amp;nbsp;=&amp;nbsp;LocalTime.of(hour:13,&amp;nbsp;minute:59,&amp;nbsp;second:59); &lt;br /&gt;&lt;br /&gt;if(orderTime.isBefore(startTime)&amp;nbsp;||&amp;nbsp;orderTime.isAfter(endTime)){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(couponApplied) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;totalPrice&amp;nbsp;-=&amp;nbsp;2000; &lt;br /&gt;&amp;nbsp;&amp;nbsp;else&amp;nbsp;totalPrice&amp;nbsp;-=&amp;nbsp;500; &lt;br /&gt;} &lt;br /&gt;return&amp;nbsp;totalPrice &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;Q.&amp;nbsp;Each&amp;nbsp;Choice&amp;nbsp;Testing으로&amp;nbsp;오류&amp;nbsp;검출&amp;nbsp;가능?&amp;nbsp;검출&amp;nbsp;안된다(운이&amp;nbsp;좋으면&amp;nbsp;검출&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;&amp;lt;테스트&amp;nbsp;조합의&amp;nbsp;갯수&amp;gt; &lt;br /&gt;Each&amp;nbsp;Choice&amp;nbsp;&amp;lt;&amp;nbsp;Pairwise&amp;nbsp;&amp;lt;&amp;nbsp;All&amp;nbsp;Combination &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;예제_2&amp;gt; &lt;br /&gt;[명세]&amp;nbsp;새우&amp;nbsp;버거와&amp;nbsp;닭고기&amp;nbsp;버거는&amp;nbsp;4000원,&amp;nbsp;소고기&amp;nbsp;버거는&amp;nbsp;5000원이다. &lt;br /&gt;주문할&amp;nbsp;때&amp;nbsp;쿠폰을&amp;nbsp;사용하면&amp;nbsp;1000원&amp;nbsp;할인&amp;nbsp;가능하지만&amp;nbsp;피크&amp;nbsp;타임외의&amp;nbsp;시간에만&amp;nbsp;적용이&amp;nbsp;가능하다.&amp;nbsp;피크&amp;nbsp;타임은&amp;nbsp;오전&amp;nbsp;11시~오후2시(11:00~13:59)분이다.&amp;nbsp;피크&amp;nbsp;타임&amp;nbsp;외의&amp;nbsp;시간에&amp;nbsp;주문하면&amp;nbsp;500원&amp;nbsp;할인한다.&amp;nbsp;소고기&amp;nbsp;버거는&amp;nbsp;쿠폰을&amp;nbsp;사용할&amp;nbsp;때&amp;nbsp;300원&amp;nbsp;더&amp;nbsp;할인한다.&amp;nbsp;만약&amp;nbsp;주문시간에&amp;nbsp;따른&amp;nbsp;할인과&amp;nbsp;쿠폰이&amp;nbsp;동시에&amp;nbsp;적용되면&amp;nbsp;쿠폰에&amp;nbsp;따른&amp;nbsp;할인만&amp;nbsp;적용된다. &lt;br /&gt;&lt;br /&gt;LocalTime&amp;nbsp;startTime&amp;nbsp;=&amp;nbsp;LocalTime.of(11,0,0); &lt;br /&gt;LocalTime&amp;nbsp;endTime&amp;nbsp;=&amp;nbsp;LocalTime.of(13,59,59); &lt;br /&gt;if(orderTime.isBefore(startTime)&amp;nbsp;||&amp;nbsp;orderTime.isAfter(endTme)){ &lt;br /&gt;if(couponApplied){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;totalPrice&amp;nbsp;-=&amp;nbsp;1000; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if(burgerType&amp;nbsp;==&amp;nbsp;BurgerKind.BEEF) &lt;br /&gt;totalPrice&amp;nbsp;-=300;&amp;nbsp;//Nonpeaktime,&amp;nbsp;Coupon&amp;nbsp;True,&amp;nbsp;BEEF&amp;nbsp;일&amp;nbsp;때&amp;nbsp;만족 &lt;br /&gt;}else&amp;nbsp;totalPrice&amp;nbsp;-=&amp;nbsp;500; &lt;br /&gt;} &lt;br /&gt;return&amp;nbsp;totalPrice; &lt;br /&gt;} &lt;br /&gt;-&amp;gt;&amp;nbsp;pairwise에서는&amp;nbsp;만족하는&amp;nbsp;커버리지가&amp;nbsp;없으므로(Nonpeaktime,&amp;nbsp;Coupon&amp;nbsp;True,&amp;nbsp;BEEF),&amp;nbsp;All&amp;nbsp;Combination을&amp;nbsp;커버리지로&amp;nbsp;테스트케이스를&amp;nbsp;만들어야&amp;nbsp;한다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Pairwise&amp;nbsp;테스트&amp;gt; &lt;br /&gt;-&amp;nbsp;Each&amp;nbsp;Choice는&amp;nbsp;유용한&amp;nbsp;테스트&amp;nbsp;케이스가&amp;nbsp;누락될&amp;nbsp;수&amp;nbsp;있다 &lt;br /&gt;-&amp;nbsp;All&amp;nbsp;Combinations는&amp;nbsp;너무&amp;nbsp;많은&amp;nbsp;테스트&amp;nbsp;케이스가&amp;nbsp;생성된다 &lt;br /&gt;-&amp;nbsp;Pairwise&amp;nbsp;테스트는&amp;nbsp;모든&amp;nbsp;가능한&amp;nbsp;입력&amp;nbsp;값들의&amp;nbsp;조합들을&amp;nbsp;테스트&amp;nbsp;하는&amp;nbsp;대신&amp;nbsp;모든&amp;nbsp;짝(pair)들의&amp;nbsp;조합을&amp;nbsp;테스트하는&amp;nbsp;방법 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Base&amp;nbsp;Choice&amp;nbsp;테스팅&amp;gt; &lt;br /&gt;-&amp;nbsp;기반이&amp;nbsp;되는&amp;nbsp;테스트&amp;nbsp;조합을&amp;nbsp;미리&amp;nbsp;선정한다.&amp;nbsp;기반&amp;nbsp;테스트는&amp;nbsp;사용자의&amp;nbsp;관점에서&amp;nbsp;가장&amp;nbsp;선택될&amp;nbsp;빈도가&amp;nbsp;높으면서&amp;nbsp;일반적으로는&amp;nbsp;정상&amp;nbsp;동작할&amp;nbsp;수있는&amp;nbsp;것을&amp;nbsp;선택한다.&amp;nbsp;기반&amp;nbsp;선정&amp;nbsp;조합은&amp;nbsp;우선&amp;nbsp;기반&amp;nbsp;조합을&amp;nbsp;선정하고&amp;nbsp;선정된&amp;nbsp;기반&amp;nbsp;테스트에서&amp;nbsp;하나의&amp;nbsp;인자에만&amp;nbsp;변경을&amp;nbsp;주고&amp;nbsp;나머지는&amp;nbsp;기반&amp;nbsp;테스트의&amp;nbsp;값으로&amp;nbsp;고정하여&amp;nbsp;생성한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;IPO&amp;nbsp;알고리즘&amp;gt; &lt;br /&gt;-&amp;nbsp;수평확장(Horizontal&amp;nbsp;Growth)&amp;nbsp;수직확장(Vertical&amp;nbsp;Growth)의&amp;nbsp;반복 &lt;br /&gt;-&amp;nbsp;수평확장은&amp;nbsp;새로운&amp;nbsp;Factor를&amp;nbsp;고려하는&amp;nbsp;과정이고&amp;nbsp;수직확장은&amp;nbsp;테스트&amp;nbsp;케이스를&amp;nbsp;추가하는&amp;nbsp;과정이다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;수평확장&amp;nbsp;:&amp;nbsp;수평으로&amp;nbsp;확장하는데&amp;nbsp;값은&amp;nbsp;'입력인자,&amp;nbsp;Test&amp;nbsp;item,&amp;nbsp;Parameter'가&amp;nbsp;있다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;수직확장&amp;nbsp;:&amp;nbsp;수평확장이&amp;nbsp;하나의&amp;nbsp;테스트&amp;nbsp;케이스(Test&amp;nbsp;Case)가&amp;nbsp;되는&amp;nbsp;것 &lt;br /&gt;*Test&amp;nbsp;Item&amp;nbsp;Parameter&amp;nbsp;=&amp;nbsp;Factor &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IPO 알고리즘.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRKjrv/btsHGcEpO5P/dVblhv793KfpHqmYs1FiOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRKjrv/btsHGcEpO5P/dVblhv793KfpHqmYs1FiOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRKjrv/btsHGcEpO5P/dVblhv793KfpHqmYs1FiOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRKjrv%2FbtsHGcEpO5P%2FdVblhv793KfpHqmYs1FiOK%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;616&quot; height=&quot;302&quot; data-filename=&quot;IPO 알고리즘.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1.&amp;nbsp;All&amp;nbsp;Combination&amp;nbsp;:&amp;nbsp;3*3*2=18개 &lt;br /&gt;2.&amp;nbsp;Each&amp;nbsp;Choice&amp;nbsp;=&amp;nbsp;3개 &lt;br /&gt;3.&amp;nbsp;Pairwise&amp;nbsp;:&amp;nbsp;인자들&amp;nbsp;중에&amp;nbsp;가장&amp;nbsp;많은&amp;nbsp;값(A,&amp;nbsp;B)&amp;nbsp;=&amp;nbsp;3*3=9개&lt;/p&gt;</description>
      <category>소프트웨어공학</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/210</guid>
      <comments>https://gotjs815.tistory.com/210#entry210comment</comments>
      <pubDate>Wed, 29 May 2024 13:32:24 +0900</pubDate>
    </item>
    <item>
      <title>가상메모리(1)</title>
      <link>https://gotjs815.tistory.com/209</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;배경&amp;gt; &lt;br&gt;-&amp;nbsp;&quot;현재&amp;nbsp;실행되고&amp;nbsp;있는&amp;nbsp;코드들은&amp;nbsp;반드시&amp;nbsp;물리적&amp;nbsp;메모리에&amp;nbsp;존재해야&amp;nbsp;한다&quot; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;앞서&amp;nbsp;다룬&amp;nbsp;메모리&amp;nbsp;관리&amp;nbsp;기법들의&amp;nbsp;특징 &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;방법 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스&amp;nbsp;전체를&amp;nbsp;메모리에&amp;nbsp;적재 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가장&amp;nbsp;손쉬운&amp;nbsp;방법 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Dynamic&amp;nbsp;Loading &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로그래머의&amp;nbsp;특별한&amp;nbsp;주의와&amp;nbsp;추가&amp;nbsp;작업&amp;nbsp;필요 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;단점 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스의&amp;nbsp;크기가&amp;nbsp;물리적&amp;nbsp;메모리의&amp;nbsp;크기로&amp;nbsp;제한 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;주소&amp;nbsp;공간과&amp;nbsp;물리&amp;nbsp;메모리&amp;gt; &lt;br&gt;-&amp;nbsp;컴퓨터에&amp;nbsp;설치&amp;nbsp;가능한&amp;nbsp;물리&amp;nbsp;메모리의&amp;nbsp;한계 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;CPU의&amp;nbsp;주소&amp;nbsp;버스&amp;nbsp;크기에&amp;nbsp;좌우 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;32비트&amp;nbsp;CPU의&amp;nbsp;물리&amp;nbsp;메모리&amp;nbsp;최대량&amp;nbsp;:&amp;nbsp;2^32B&amp;nbsp;=&amp;nbsp;4GB &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;64비트&amp;nbsp;CPU의&amp;nbsp;물리&amp;nbsp;메모리&amp;nbsp;최대량&amp;nbsp;:&amp;nbsp;2^64B&amp;nbsp;=&amp;nbsp;2^24TB &lt;br&gt;&lt;br&gt;-&amp;nbsp;실제&amp;nbsp;설치되는&amp;nbsp;물리&amp;nbsp;메모리 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;대부분&amp;nbsp;8~32GB정도&amp;nbsp;장착 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;비용적인&amp;nbsp;한계 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;물리&amp;nbsp;메모리의&amp;nbsp;한계&amp;gt; &lt;br&gt;-&amp;nbsp;물리&amp;nbsp;메모리보다&amp;nbsp;큰&amp;nbsp;크기의&amp;nbsp;프로세스는&amp;nbsp;실행될&amp;nbsp;수&amp;nbsp;없다! &lt;br&gt;-&amp;nbsp;동시&amp;nbsp;수행되는&amp;nbsp;프로세스들의&amp;nbsp;크기의&amp;nbsp;총합은&amp;nbsp;물리&amp;nbsp;메모리보다&amp;nbsp;클&amp;nbsp;수&amp;nbsp;없다! &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;메모리에&amp;nbsp;모든&amp;nbsp;내용이&amp;nbsp;있어야&amp;nbsp;하는가?&amp;gt; &lt;br&gt;-&amp;nbsp;프로그램의&amp;nbsp;모든&amp;nbsp;부분이&amp;nbsp;동시에&amp;nbsp;요구되진&amp;nbsp;않음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;순차적&amp;nbsp;실행 &lt;br&gt;&lt;br&gt;-&amp;nbsp;항상&amp;nbsp;모든&amp;nbsp;코드가&amp;nbsp;메모리에&amp;nbsp;적재되어&amp;nbsp;있어야&amp;nbsp;하지는&amp;nbsp;않음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;오류&amp;nbsp;상황을&amp;nbsp;위한&amp;nbsp;코드 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;잘&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;기능에&amp;nbsp;대한&amp;nbsp;코드 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;필요&amp;nbsp;이상으로&amp;nbsp;할당된&amp;nbsp;큰&amp;nbsp;용량의&amp;nbsp;배열 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;그러면&amp;nbsp;가능한&amp;nbsp;대안은?&amp;gt; &lt;br&gt;-&amp;nbsp;물리&amp;nbsp;메모리를&amp;nbsp;보조저장장치로&amp;nbsp;확장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스를&amp;nbsp;메모리와&amp;nbsp;보조장치에&amp;nbsp;나누어&amp;nbsp;저장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스를&amp;nbsp;실행하기에&amp;nbsp;충분히&amp;nbsp;큰&amp;nbsp;메모리가&amp;nbsp;있다고&amp;nbsp;착각하게&amp;nbsp;만드는&amp;nbsp;메모리&amp;nbsp;관리&amp;nbsp;기법 &lt;br&gt;&lt;br&gt;-&amp;nbsp;스와핑(Swapping) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;메모리가&amp;nbsp;부족할&amp;nbsp;때,&amp;nbsp;실행에&amp;nbsp;필요하지&amp;nbsp;않는&amp;nbsp;부분은&amp;nbsp;보조저장장치로&amp;nbsp;이동 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;실행에&amp;nbsp;필요할&amp;nbsp;때&amp;nbsp;보조저장장치로부터&amp;nbsp;물리&amp;nbsp;메모리로&amp;nbsp;이동 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;가상&amp;nbsp;메모리(Virtual&amp;nbsp;Memory)&amp;gt; &lt;br&gt;-&amp;nbsp;물리메모리&amp;nbsp;영역을&amp;nbsp;보조저장장치까지&amp;nbsp;연장 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스왑(swap) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;무한의&amp;nbsp;가상적인&amp;nbsp;메모리&amp;nbsp;공간 &lt;br&gt;&lt;br&gt;-&amp;nbsp;실행을&amp;nbsp;위해&amp;nbsp;프로세스의&amp;nbsp;일부만을&amp;nbsp;메모리에&amp;nbsp;할당 &lt;br&gt;-&amp;nbsp;가용&amp;nbsp;메모리&amp;nbsp;부족&amp;nbsp;시&amp;nbsp;일부&amp;nbsp;내용을&amp;nbsp;스왑&amp;nbsp;영역으로&amp;nbsp;옮겨&amp;nbsp;빈&amp;nbsp;영역&amp;nbsp;확보 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;다중&amp;nbsp;프로그래밍&amp;nbsp;정도를&amp;nbsp;높여&amp;nbsp;CPU&amp;nbsp;이용률/처리율&amp;nbsp;향상 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스왑-아웃,&amp;nbsp;스왑-인 &lt;br&gt;&lt;br&gt;-&amp;nbsp;OS&amp;nbsp;마다&amp;nbsp;세부&amp;nbsp;구현&amp;nbsp;방법은&amp;nbsp;다름 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;요구&amp;nbsp;페이징,&amp;nbsp;요구&amp;nbsp;세그멘테이션&amp;nbsp;등 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NyWEK/btsHxF8rIKi/XEJgK7EfIKkipS5YQqY24k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NyWEK/btsHxF8rIKi/XEJgK7EfIKkipS5YQqY24k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NyWEK/btsHxF8rIKi/XEJgK7EfIKkipS5YQqY24k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNyWEK%2FbtsHxF8rIKi%2FXEJgK7EfIKkipS5YQqY24k%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;917&quot; height=&quot;637&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;일부만&amp;nbsp;메모리에&amp;nbsp;적재할&amp;nbsp;수&amp;nbsp;있다면?&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스의&amp;nbsp;크기가&amp;nbsp;물리적&amp;nbsp;메모리의&amp;nbsp;크기에&amp;nbsp;의해&amp;nbsp;제약&amp;nbsp;받지&amp;nbsp;않을&amp;nbsp;수&amp;nbsp;있다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로그래밍&amp;nbsp;작업이&amp;nbsp;간단해짐 &lt;br&gt;&lt;br&gt;-&amp;nbsp;다중&amp;nbsp;프로그래밍&amp;nbsp;정도가&amp;nbsp;늘어남 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Turnaround&amp;nbsp;time과&amp;nbsp;response&amp;nbsp;time이&amp;nbsp;늘어나지&amp;nbsp;않으면서&amp;nbsp;CPU&amp;nbsp;utilization과&amp;nbsp;throughput&amp;nbsp;향상 &lt;br&gt;&lt;br&gt;-&amp;nbsp;보다&amp;nbsp;빠른&amp;nbsp;실행이&amp;nbsp;가능 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;적재&amp;nbsp;속도의&amp;nbsp;향상 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;swap을&amp;nbsp;위한&amp;nbsp;입출력이&amp;nbsp;줄어듦 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Process&amp;nbsp;실행&amp;nbsp;관련&amp;nbsp;주요&amp;nbsp;용어&amp;gt; &lt;br&gt;-&amp;nbsp;CPU&amp;nbsp;utilization(이용률) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;CPU가&amp;nbsp;얼마나&amp;nbsp;많이&amp;nbsp;이용되는가 &lt;br&gt;&lt;br&gt;-&amp;nbsp;Throughput(처리량) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;단위&amp;nbsp;시간&amp;nbsp;동안&amp;nbsp;수행이&amp;nbsp;완료된&amp;nbsp;프로세스&amp;nbsp;개수 &lt;br&gt;&lt;br&gt;-&amp;nbsp;Turnaround&amp;nbsp;time(총&amp;nbsp;처리&amp;nbsp;시간) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;임의의&amp;nbsp;프로세스를&amp;nbsp;수행하는데&amp;nbsp;걸리는&amp;nbsp;시간 &lt;br&gt;&lt;br&gt;-&amp;nbsp;Response&amp;nbsp;time(응답&amp;nbsp;시간) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;요청을&amp;nbsp;보낸&amp;nbsp;후&amp;nbsp;첫&amp;nbsp;응답이&amp;nbsp;발생하기&amp;nbsp;까지&amp;nbsp;걸린&amp;nbsp;시간 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;Virtual&amp;nbsp;Memory&amp;nbsp;사용의&amp;nbsp;기본적인&amp;nbsp;이점&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스간의&amp;nbsp;메모리&amp;nbsp;공유를&amp;nbsp;가능하게&amp;nbsp;한다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스는&amp;nbsp;각자&amp;nbsp;자신의&amp;nbsp;주소&amp;nbsp;공간을&amp;nbsp;사용하는&amp;nbsp;것처럼&amp;nbsp;보인다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;여러&amp;nbsp;프로세스&amp;nbsp;간에&amp;nbsp;시스템&amp;nbsp;라이브러리를&amp;nbsp;공유 &lt;br&gt;&lt;br&gt;-&amp;nbsp;프로그램&amp;nbsp;실행&amp;nbsp;중에&amp;nbsp;사용되는&amp;nbsp;메모리의&amp;nbsp;양/배치&amp;nbsp;방법&amp;nbsp;등에&amp;nbsp;대해&amp;nbsp;신경쓰지&amp;nbsp;않아도&amp;nbsp;된다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;무한의&amp;nbsp;메모리라&amp;nbsp;가정&amp;nbsp;가능 &lt;br&gt;&lt;br&gt;-&amp;nbsp;메모리&amp;nbsp;계층&amp;nbsp;구조에서&amp;nbsp;높은&amp;nbsp;access&amp;nbsp;rate와&amp;nbsp;비트&amp;nbsp;당&amp;nbsp;낮은&amp;nbsp;저장&amp;nbsp;비용(low&amp;nbsp;cost&amp;nbsp;per&amp;nbsp;bit)위해 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;가상&amp;nbsp;메모리&amp;nbsp;시스템의&amp;nbsp;주요&amp;nbsp;동작&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스의&amp;nbsp;처리&amp;nbsp;요구에&amp;nbsp;따라&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;레벨의&amp;nbsp;메모리&amp;nbsp;간의&amp;nbsp;정보&amp;nbsp;블록들의&amp;nbsp;스와핑 &lt;br&gt;&lt;br&gt;-&amp;nbsp;주요&amp;nbsp;결정&amp;nbsp;사항 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;인출&amp;nbsp;정책(Fetch&amp;nbsp;policy)&amp;nbsp;:&amp;nbsp;언제&amp;nbsp;가져올&amp;nbsp;것인가? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;배치&amp;nbsp;정책(Placement&amp;nbsp;policy)&amp;nbsp;:&amp;nbsp;어디로&amp;nbsp;가져올&amp;nbsp;것인가? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;교체&amp;nbsp;정책(Replacement&amp;nbsp;policy)&amp;nbsp;:&amp;nbsp;어느&amp;nbsp;frame과&amp;nbsp;교체할&amp;nbsp;것인가? &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;가상&amp;nbsp;메모리&amp;nbsp;관련&amp;nbsp;문제들&amp;gt; &lt;br&gt;-&amp;nbsp;가상&amp;nbsp;메모리의&amp;nbsp;페이지&amp;nbsp;테이블&amp;nbsp;구성 &lt;br&gt;-&amp;nbsp;페이지&amp;nbsp;폴트 &lt;br&gt;-&amp;nbsp;페이지&amp;nbsp;할당 &lt;br&gt;-&amp;nbsp;스왑&amp;nbsp;영역 &lt;br&gt;-&amp;nbsp;프레임&amp;nbsp;할당 &lt;br&gt;-&amp;nbsp;스레싱 &lt;br&gt;-&amp;nbsp;작업&amp;nbsp;집합 &lt;br&gt;-&amp;nbsp;페이지&amp;nbsp;교체&amp;nbsp;알고리즘 &lt;br&gt;-&amp;nbsp;쓰기&amp;nbsp;시&amp;nbsp;복사 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;요구&amp;nbsp;페이징(Demand&amp;nbsp;Paging)&amp;gt; &lt;br&gt;-&amp;nbsp;필요한&amp;nbsp;page들만&amp;nbsp;물리&amp;nbsp;메모리에&amp;nbsp;적재하는&amp;nbsp;방법 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;실행중에&amp;nbsp;page들이&amp;nbsp;실제&amp;nbsp;필요할&amp;nbsp;때에&amp;nbsp;적재된다 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;사용되지&amp;nbsp;않는&amp;nbsp;page는&amp;nbsp;적재되지&amp;nbsp;않음 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;페이지를&amp;nbsp;갖는&amp;nbsp;보조기억장치&amp;nbsp;영역&amp;nbsp;:&amp;nbsp;실행파일&amp;nbsp;+&amp;nbsp;스왑 &lt;br&gt;&lt;br&gt;-&amp;nbsp;장점 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Less&amp;nbsp;I/O&amp;nbsp;needed &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Less&amp;nbsp;memory&amp;nbsp;needed &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Faster&amp;nbsp;response &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;More&amp;nbsp;users&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;lt;요구 페이징의 구성&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DLclE/btsHxIDSnHU/7pZG1kHbxlUiNKBwMKF1PK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DLclE/btsHxIDSnHU/7pZG1kHbxlUiNKBwMKF1PK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DLclE/btsHxIDSnHU/7pZG1kHbxlUiNKBwMKF1PK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDLclE%2FbtsHxIDSnHU%2F7pZG1kHbxlUiNKBwMKF1PK%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;766&quot; height=&quot;617&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;스왑(swap)&amp;nbsp;영역&amp;gt; &lt;br&gt;-&amp;nbsp;메모리가&amp;nbsp;부족할&amp;nbsp;때,&amp;nbsp;메모리를&amp;nbsp;비우고&amp;nbsp;페이지를&amp;nbsp;저장해두는&amp;nbsp;하드&amp;nbsp;디스크&amp;nbsp;영역 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;리눅스&amp;nbsp;:&amp;nbsp;swap&amp;nbsp;파티션 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;MS-Windows&amp;nbsp;:&amp;nbsp;C\pagefile.sys&amp;nbsp;파일 &lt;br&gt;&lt;br&gt;-&amp;nbsp;스왑-인(swap-in) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;page-in&amp;nbsp;이라고도&amp;nbsp;부르며,&amp;nbsp;스왑&amp;nbsp;영역에서&amp;nbsp;한&amp;nbsp;page를&amp;nbsp;메모리&amp;nbsp;frame으로&amp;nbsp;읽어들이는&amp;nbsp;행위 &lt;br&gt;&lt;br&gt;-&amp;nbsp;스왑-아웃(swap-out) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;page-out&amp;nbsp;이라고도&amp;nbsp;부르며,&amp;nbsp;메모리&amp;nbsp;frame에&amp;nbsp;저장된&amp;nbsp;page를&amp;nbsp;스왑&amp;nbsp;영역에&amp;nbsp;저장하는&amp;nbsp;행위 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;가상&amp;nbsp;메모리에서의&amp;nbsp;페이지&amp;nbsp;테이블&amp;gt; &lt;br&gt;-&amp;nbsp;valid/presence&amp;nbsp;bit &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;page가&amp;nbsp;물리&amp;nbsp;메모리에&amp;nbsp;있는지&amp;nbsp;여부 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;page가&amp;nbsp;frame&amp;nbsp;번호의&amp;nbsp;메모리에&amp;nbsp;있음 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;0&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;page가&amp;nbsp;디스크에&amp;nbsp;있음 &lt;br&gt;&lt;br&gt;-&amp;nbsp;modified&amp;nbsp;bit(dirty&amp;nbsp;bit) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;page가&amp;nbsp;수정되었는지&amp;nbsp;여부 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;page가&amp;nbsp;수정되었는지&amp;nbsp;여부 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스왑&amp;nbsp;아웃될&amp;nbsp;때&amp;nbsp;스왑&amp;nbsp;영역에서&amp;nbsp;저장&amp;nbsp;필요 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;0&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;page는&amp;nbsp;수정된&amp;nbsp;적이&amp;nbsp;없음 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스왑&amp;nbsp;아웃될&amp;nbsp;때&amp;nbsp;스왑&amp;nbsp;영역에&amp;nbsp;저장&amp;nbsp;불필요 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;페이지&amp;nbsp;부재(Page&amp;nbsp;Fault)&amp;gt; &lt;br&gt;-&amp;nbsp;메모리에&amp;nbsp;없는&amp;nbsp;page가&amp;nbsp;참조할&amp;nbsp;때&amp;nbsp;페이징&amp;nbsp;하드웨어가&amp;nbsp;OS에게&amp;nbsp;보내는&amp;nbsp;trap &lt;br&gt;&lt;br&gt;-&amp;nbsp;Page&amp;nbsp;fault에&amp;nbsp;대한&amp;nbsp;처리&amp;nbsp;과정 &lt;br&gt;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;프로세스에&amp;nbsp;대한&amp;nbsp;page&amp;nbsp;table을&amp;nbsp;통해&amp;nbsp;해당&amp;nbsp;참조가&amp;nbsp;유효한지&amp;nbsp;검사 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Invalid&amp;nbsp;reference&amp;nbsp;=&amp;gt;&amp;nbsp;abort &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Just&amp;nbsp;not&amp;nbsp;in&amp;nbsp;memory&amp;nbsp;=&amp;gt;&amp;nbsp;디스크에서&amp;nbsp;가져와야&amp;nbsp;함 &lt;br&gt;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;Free&amp;nbsp;frame을&amp;nbsp;찾아&amp;nbsp;디스크로부터&amp;nbsp;page를&amp;nbsp;가져옴 &lt;br&gt;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;Page&amp;nbsp;table&amp;nbsp;갱신 &lt;br&gt;&amp;nbsp;&amp;nbsp;4.&amp;nbsp;Page&amp;nbsp;fault에&amp;nbsp;의해&amp;nbsp;중단된&amp;nbsp;intrsuction&amp;nbsp;재실행&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;lt;페이지 부재 처리 과정&amp;gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ml6FY/btsHxKBIZL3/wTzr9DIcRWN1kNcogaOYJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ml6FY/btsHxKBIZL3/wTzr9DIcRWN1kNcogaOYJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ml6FY/btsHxKBIZL3/wTzr9DIcRWN1kNcogaOYJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fml6FY%2FbtsHxKBIZL3%2FwTzr9DIcRWN1kNcogaOYJ1%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;757&quot; height=&quot;633&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;중단된&amp;nbsp;Instruction의&amp;nbsp;재실행&amp;gt; &lt;br&gt;-&amp;nbsp;Demand&amp;nbsp;paging을&amp;nbsp;위한&amp;nbsp;필수적&amp;nbsp;요구사항 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;일반적으로&amp;nbsp;중단된&amp;nbsp;프로세스의&amp;nbsp;상태를&amp;nbsp;나타내는&amp;nbsp;각종&amp;nbsp;레지스터들의&amp;nbsp;값을&amp;nbsp;저장해두었다가&amp;nbsp;복원 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Instruction&amp;nbsp;fetch시&amp;nbsp;발생된&amp;nbsp;경우 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;page를&amp;nbsp;메모리로&amp;nbsp;가져온&amp;nbsp;후&amp;nbsp;다시&amp;nbsp;시도 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;Operand&amp;nbsp;fetch/execution시&amp;nbsp;발생된&amp;nbsp;경우 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;해당&amp;nbsp;page를&amp;nbsp;메모리로&amp;nbsp;가져온&amp;nbsp;후,&amp;nbsp;해당&amp;nbsp;instruction을&amp;nbsp;다시&amp;nbsp;인출하여&amp;nbsp;실행 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;반복&amp;nbsp;작업이&amp;nbsp;수반되나&amp;nbsp;감수할&amp;nbsp;만함 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;가상&amp;nbsp;메모리에서&amp;nbsp;새&amp;nbsp;프로세스&amp;nbsp;생성&amp;gt; &lt;br&gt;-&amp;nbsp;fork()&amp;nbsp;시스템&amp;nbsp;호출로&amp;nbsp;생성되는&amp;nbsp;프로세스 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;메모리&amp;nbsp;할당&amp;nbsp;+&amp;nbsp;페이지&amp;nbsp;적재 &lt;br&gt;&lt;br&gt;-&amp;nbsp;fork()&amp;nbsp;시스템&amp;nbsp;호출 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;방법&amp;nbsp;1&amp;nbsp;:&amp;nbsp;완전&amp;nbsp;복사 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;방법&amp;nbsp;2&amp;nbsp;:&amp;nbsp;쓰기&amp;nbsp;시&amp;nbsp;복사 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;방법&amp;nbsp;1&amp;nbsp;:&amp;nbsp;완전&amp;nbsp;복사&amp;gt; &lt;br&gt;-&amp;nbsp;부모&amp;nbsp;프로세스의&amp;nbsp;모든&amp;nbsp;페이지를&amp;nbsp;온전히&amp;nbsp;복사 &lt;br&gt;-&amp;nbsp;많은&amp;nbsp;경우&amp;nbsp;fork()&amp;nbsp;후&amp;nbsp;바로&amp;nbsp;exec()&amp;nbsp;하기에&amp;nbsp;비효율적 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;ex) &lt;br&gt;int&amp;nbsp;childPid&amp;nbsp;==&amp;nbsp;fork();&amp;nbsp;//쉘을&amp;nbsp;복제한&amp;nbsp;자식&amp;nbsp;프로세스&amp;nbsp;생성 &lt;br&gt;if(childPid&amp;nbsp;==&amp;nbsp;0){&amp;nbsp;//자식&amp;nbsp;프로세스&amp;nbsp;코드 &lt;br&gt;execlp(&quot;/bin/ls&quot;,&amp;nbsp;&quot;ls&quot;,&amp;nbsp;NULL);&amp;nbsp;//&amp;nbsp;/bin/ls&amp;nbsp;파일을&amp;nbsp;적재하여&amp;nbsp;실행 &lt;br&gt;}&amp;nbsp;//&amp;nbsp;execlp()에&amp;nbsp;의해&amp;nbsp;자식&amp;nbsp;프로세스의&amp;nbsp;메모리가&amp;nbsp;모두&amp;nbsp;반환되고&amp;nbsp;실행&amp;nbsp;파일&amp;nbsp;ls로부터&amp;nbsp;새로&amp;nbsp;페이지&amp;nbsp;적재 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOnRBT/btsHzeavDV6/tnsmMPqLwkuhkONUW0iKo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOnRBT/btsHzeavDV6/tnsmMPqLwkuhkONUW0iKo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOnRBT/btsHzeavDV6/tnsmMPqLwkuhkONUW0iKo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOnRBT%2FbtsHzeavDV6%2FtnsmMPqLwkuhkONUW0iKo0%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;951&quot; height=&quot;448&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;방법&amp;nbsp;2&amp;nbsp;:&amp;nbsp;쓰기&amp;nbsp;시&amp;nbsp;복사(Copy-on-Write,&amp;nbsp;COW)&amp;gt; &lt;br&gt;-&amp;nbsp;자식&amp;nbsp;프로세스를&amp;nbsp;위해&amp;nbsp;부모의&amp;nbsp;page&amp;nbsp;table만을&amp;nbsp;복사 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;초기에&amp;nbsp;자식은&amp;nbsp;부모의&amp;nbsp;메모리&amp;nbsp;frame을&amp;nbsp;온전히&amp;nbsp;공유 &lt;br&gt;&lt;br&gt;-&amp;nbsp;자식의&amp;nbsp;page&amp;nbsp;table&amp;nbsp;항목에&amp;nbsp;COW(쓰기시&amp;nbsp;복사)표시를&amp;nbsp;해둠 &lt;br&gt;&lt;br&gt;-&amp;nbsp;부모/자식&amp;nbsp;중&amp;nbsp;하나에서&amp;nbsp;page&amp;nbsp;수정이&amp;nbsp;발생하면&amp;nbsp;새&amp;nbsp;frame&amp;nbsp;할당하고&amp;nbsp;부모&amp;nbsp;frame복사 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;COW의&amp;nbsp;특징&amp;gt; &lt;br&gt;-&amp;nbsp;효율적인&amp;nbsp;프로세스&amp;nbsp;생성이&amp;nbsp;가능 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스&amp;nbsp;생성&amp;nbsp;시간&amp;nbsp;절약 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;전체&amp;nbsp;page들을&amp;nbsp;복사하지&amp;nbsp;않고&amp;nbsp;단지&amp;nbsp;변경되거나,&amp;nbsp;변경&amp;nbsp;가능한&amp;nbsp;page들만&amp;nbsp;복사 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;fork()&amp;nbsp;후&amp;nbsp;exec()&amp;nbsp;발생&amp;nbsp;시&amp;nbsp;불필요한&amp;nbsp;복사&amp;nbsp;시간의&amp;nbsp;낭비가&amp;nbsp;생기지&amp;nbsp;않음 &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;메모리&amp;nbsp;절약 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;수정이&amp;nbsp;발생되지&amp;nbsp;않는&amp;nbsp;page는&amp;nbsp;새&amp;nbsp;frame을&amp;nbsp;할당할&amp;nbsp;필요&amp;nbsp;없음&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;예&amp;nbsp;:&amp;nbsp;코드&amp;nbsp;영역 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;요구&amp;nbsp;페이징&amp;nbsp;관련&amp;nbsp;이슈&amp;gt; &lt;br&gt;-&amp;nbsp;페이지&amp;nbsp;부재가&amp;nbsp;빈번히&amp;nbsp;발생시&amp;nbsp;빈번한&amp;nbsp;입출력으로&amp;nbsp;시스템&amp;nbsp;성능이&amp;nbsp;떨어지지&amp;nbsp;않을까? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;그럴&amp;nbsp;수&amp;nbsp;있다&amp;nbsp;:&amp;nbsp;스레싱(thrashing) &lt;br&gt;&lt;br&gt;-&amp;nbsp;실행&amp;nbsp;시&amp;nbsp;페이지&amp;nbsp;부재가&amp;nbsp;계속되면&amp;nbsp;해당&amp;nbsp;프로세스의&amp;nbsp;많은&amp;nbsp;page가&amp;nbsp;적재되는데,&amp;nbsp;애초부터&amp;nbsp;적재하지&amp;nbsp;않나? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;실행&amp;nbsp;과정에서&amp;nbsp;참조될&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;page를&amp;nbsp;미리&amp;nbsp;알&amp;nbsp;수&amp;nbsp;없기에&amp;nbsp; &lt;br&gt;&lt;br&gt;-&amp;nbsp;한&amp;nbsp;프로세스에게&amp;nbsp;할당&amp;nbsp;가능한&amp;nbsp;frame은&amp;nbsp;무한한가? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;물리&amp;nbsp;메모리&amp;nbsp;양의&amp;nbsp;크기로&amp;nbsp;제한됨 &lt;br&gt;&lt;br&gt;-&amp;nbsp;한&amp;nbsp;프로세스에게&amp;nbsp;할당하는&amp;nbsp;frame&amp;nbsp;수와&amp;nbsp;페이지&amp;nbsp;부재의&amp;nbsp;관계 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;일반적으로&amp;nbsp;반비례&amp;nbsp;관계 &lt;br&gt;&lt;br&gt;-&amp;nbsp;커널&amp;nbsp;코드와&amp;nbsp;커널&amp;nbsp;데이터가&amp;nbsp;적재된&amp;nbsp;frame도&amp;nbsp;스왑-아웃되나? &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;실행&amp;nbsp;효율성&amp;nbsp;때문에&amp;nbsp;이&amp;nbsp;둘은&amp;nbsp;항상&amp;nbsp;물리&amp;nbsp;메모리에&amp;nbsp;적재 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;스레싱(Thrashing)&amp;gt; &lt;br&gt;-&amp;nbsp;프로세스가&amp;nbsp;실제&amp;nbsp;실행보다&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;시간을&amp;nbsp;페이징&amp;nbsp;처리에&amp;nbsp;할당하고&amp;nbsp;있는&amp;nbsp;상태 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;과도한&amp;nbsp;page&amp;nbsp;교체로&amp;nbsp;인한&amp;nbsp;swap&amp;nbsp;in/out에&amp;nbsp;몰두 &lt;br&gt;&lt;br&gt;-&amp;nbsp;원인 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스가&amp;nbsp;실행에&amp;nbsp;필요한&amp;nbsp;충분한&amp;nbsp;frame을&amp;nbsp;할당받지&amp;nbsp;못하면 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;page&amp;nbsp;fault가&amp;nbsp;매우&amp;nbsp;낮아짐 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;CPU&amp;nbsp;이용률이&amp;nbsp;낮아짐 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;OS는&amp;nbsp;다중&amp;nbsp;프로그래밍&amp;nbsp;정도를&amp;nbsp;증가시키려&amp;nbsp;함 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;악순환&amp;nbsp;반복으로&amp;nbsp;심각한&amp;nbsp;성능&amp;nbsp;저하&amp;nbsp;초래 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;스레싱&amp;nbsp;현상&amp;gt; &lt;br&gt;-&amp;nbsp;다중&amp;nbsp;프로그래밍&amp;nbsp;정도가&amp;nbsp;높아질수록&amp;nbsp;CPU&amp;nbsp;이용률&amp;nbsp;증가 &lt;br&gt;-&amp;nbsp;다중&amp;nbsp;프로그래밍&amp;nbsp;정도가&amp;nbsp;임계점(M)을&amp;nbsp;넘어가면&amp;nbsp;스레싱&amp;nbsp;발생 &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lOud7/btsHza614Fk/oBUV6c2J6TLdD80Iv3mAqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lOud7/btsHza614Fk/oBUV6c2J6TLdD80Iv3mAqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lOud7/btsHza614Fk/oBUV6c2J6TLdD80Iv3mAqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlOud7%2FbtsHza614Fk%2FoBUV6c2J6TLdD80Iv3mAqk%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;917&quot; height=&quot;412&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;스레싱&amp;nbsp;해결&amp;nbsp;및&amp;nbsp;예방&amp;gt; &lt;br&gt;-&amp;nbsp;감지&amp;nbsp;방법 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;OS마다&amp;nbsp;다름 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;MS&amp;nbsp;윈도&amp;nbsp;:&amp;nbsp;process&amp;nbsp;explore&amp;nbsp;등&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;리눅스&amp;nbsp;:&amp;nbsp;top,&amp;nbsp;htop,&amp;nbsp;vmstat&amp;nbsp;명령 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;작업&amp;nbsp;부하는&amp;nbsp;높지만&amp;nbsp;CPU&amp;nbsp;이용률이&amp;nbsp;낮고,&amp;nbsp;스왑-인/아웃이&amp;nbsp;모두&amp;nbsp;높은지&amp;nbsp;검사 &lt;br&gt;&lt;br&gt;-&amp;nbsp;해결&amp;nbsp;및&amp;nbsp;예방 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;다중&amp;nbsp;프로그래밍&amp;nbsp;정도&amp;nbsp;줄이기 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;일부&amp;nbsp;프로세스&amp;nbsp;종료 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;빠른&amp;nbsp;보조저장장치의&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;물리&amp;nbsp;메모리&amp;nbsp;증가 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;참조의&amp;nbsp;지역성(reference&amp;nbsp;of&amp;nbsp;locality)&amp;gt; &lt;br&gt;-&amp;nbsp;CPU가&amp;nbsp;짧은&amp;nbsp;시간&amp;nbsp;범위&amp;nbsp;내에&amp;nbsp;일정&amp;nbsp;구간의&amp;nbsp;메모리&amp;nbsp;영역을&amp;nbsp;반복적으로&amp;nbsp;참조하는&amp;nbsp;경향 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;locality(지역성),&amp;nbsp;principle&amp;nbsp;of&amp;nbsp;locality(지역성의&amp;nbsp;원리) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로그램이&amp;nbsp;가진&amp;nbsp;기본적인&amp;nbsp;실행&amp;nbsp;특성 &lt;br&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;짧은&amp;nbsp;시간&amp;nbsp;동안에는&amp;nbsp;메모리에&amp;nbsp;균일하게&amp;nbsp;접근하기보다는&amp;nbsp;특정&amp;nbsp;부분에&amp;nbsp;집중&amp;nbsp;참조하는&amp;nbsp;경향을&amp;nbsp;지님 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스는&amp;nbsp;최근에&amp;nbsp;참조한&amp;nbsp;데이터와&amp;nbsp;코드를&amp;nbsp;다시&amp;nbsp;참조하는&amp;nbsp;경향성 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;참조의&amp;nbsp;지역성&amp;nbsp;이동.&amp;nbsp;프로세스가&amp;nbsp;실행되는&amp;nbsp;동안&amp;nbsp;메모리&amp;nbsp;영역을&amp;nbsp;옮겨&amp;nbsp;다니면서&amp;nbsp;참조의&amp;nbsp;&amp;nbsp;지역성이&amp;nbsp;나타남 &lt;br&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;경험적&amp;nbsp;관찰에서&amp;nbsp;발견된&amp;nbsp;90/10&amp;nbsp;규칙 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&quot;프로그램&amp;nbsp;코드의&amp;nbsp;10%에서&amp;nbsp;실행&amp;nbsp;시간의&amp;nbsp;90%&amp;nbsp;소비&quot; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;참조의&amp;nbsp;지역성의&amp;nbsp;형태&amp;gt; &lt;br&gt;-&amp;nbsp;시간&amp;nbsp;지역성(temporal&amp;nbsp;locality) &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시간적으로&amp;nbsp;볼&amp;nbsp;때,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;프로세스에서&amp;nbsp;현재&amp;nbsp;참조된&amp;nbsp;주소(페이지)가&amp;nbsp;가까운&amp;nbsp;미레에&amp;nbsp;다시&amp;nbsp;참조될&amp;nbsp;가능성이&amp;nbsp;큰&amp;nbsp;특성 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;코드나&amp;nbsp;데이터,&amp;nbsp;자원&amp;nbsp;등이&amp;nbsp;짧은&amp;nbsp;시간&amp;nbsp;내에&amp;nbsp;다시&amp;nbsp;사용되는&amp;nbsp;특성&amp;nbsp;:&amp;nbsp;반복문 &lt;br&gt;&lt;br&gt;-&amp;nbsp;공간&amp;nbsp;지역성(spatial&amp;nbsp;locality) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;공간적(메모리&amp;nbsp;주소)으로&amp;nbsp;볼&amp;nbsp;때, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;참조되는&amp;nbsp;번지(페이지)&amp;nbsp;주변의&amp;nbsp;번지들이&amp;nbsp;가까운&amp;nbsp;미래에&amp;nbsp;참조될&amp;nbsp;가능성이&amp;nbsp;큰&amp;nbsp;특성 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;순차적&amp;nbsp;실행,&amp;nbsp;배열,&amp;nbsp;순차&amp;nbsp;읽기/쓰기 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;참조의&amp;nbsp;지역성의&amp;nbsp;의미&amp;gt; &lt;br&gt;-&amp;nbsp;현재&amp;nbsp;프로세스의&amp;nbsp;실행&amp;nbsp;패턴을&amp;nbsp;관찰하면 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;가까운&amp;nbsp;미래에&amp;nbsp;어떤&amp;nbsp;페이지에&amp;nbsp;접근할&amp;nbsp;것인지&amp;nbsp;합리적으로&amp;nbsp;예측&amp;nbsp;가능 &lt;br&gt;&amp;nbsp; &lt;br&gt;-&amp;nbsp;메모리&amp;nbsp;할당과&amp;nbsp;페이지&amp;nbsp;교체&amp;nbsp;전략에&amp;nbsp;활용 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;작업&amp;nbsp;집합(working&amp;nbsp;set)&amp;gt; &lt;br&gt;-&amp;nbsp;일정&amp;nbsp;시간&amp;nbsp;범위&amp;nbsp;내에&amp;nbsp;프로세스가&amp;nbsp;참조한&amp;nbsp;페이지들의&amp;nbsp;집합 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;프로세스의&amp;nbsp;실행에&amp;nbsp;필요한&amp;nbsp;페이지들의&amp;nbsp;집합 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;작업&amp;nbsp;집합에&amp;nbsp;포함된&amp;nbsp;페이지들이&amp;nbsp;모두&amp;nbsp;메모리에&amp;nbsp;적재되어&amp;nbsp;있는&amp;nbsp;것이&amp;nbsp;프로세스&amp;nbsp;실행&amp;nbsp;최고&amp;nbsp;성능 &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;참조의&amp;nbsp;지역성으로&amp;nbsp;작업&amp;nbsp;집합은&amp;nbsp;뚜렷이&amp;nbsp;형성됨 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;OS는&amp;nbsp;프로세스에게&amp;nbsp;작업&amp;nbsp;집합을&amp;nbsp;적재할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;정도의&amp;nbsp;메모리&amp;nbsp;할당할&amp;nbsp;필요가&amp;nbsp;있음 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;부족&amp;nbsp;시&amp;nbsp;잦은&amp;nbsp;스와핑&amp;nbsp;발생 &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;작업&amp;nbsp;집합과&amp;nbsp;시간&amp;nbsp;범위&amp;gt; &lt;br&gt;-&amp;nbsp;페이지&amp;nbsp;부재는&amp;nbsp;작업&amp;nbsp;집합을&amp;nbsp;메모리에&amp;nbsp;적재하는&amp;nbsp;과정 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;참조의&amp;nbsp;지역성으로&amp;nbsp;인해&amp;nbsp;일정&amp;nbsp;시간&amp;nbsp;내에&amp;nbsp;작업&amp;nbsp;집합&amp;nbsp;형성 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시간&amp;nbsp;범위가&amp;nbsp;클수록&amp;nbsp;작업&amp;nbsp;집합도&amp;nbsp;큼 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;시간&amp;nbsp;범위를&amp;nbsp;얼마로&amp;nbsp;정할&amp;nbsp;것인가? &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;작업&amp;nbsp;집합&amp;nbsp;이동(working&amp;nbsp;set&amp;nbsp;shift)&amp;gt; &lt;br&gt;-&amp;nbsp;스레싱이&amp;nbsp;아닌&amp;nbsp;경우&amp;nbsp;page&amp;nbsp;fault&amp;nbsp;rate는&amp;nbsp;시간에&amp;nbsp;따라&amp;nbsp;고점과&amp;nbsp;저점&amp;nbsp;사이를&amp;nbsp;오르내림 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;고점&amp;nbsp;:&amp;nbsp;새로운&amp;nbsp;지역으로&amp;nbsp;진입&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJjkkz/btsHxQWdndN/Sl5dImP3nwDE0PCy0IN7dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJjkkz/btsHxQWdndN/Sl5dImP3nwDE0PCy0IN7dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJjkkz/btsHxQWdndN/Sl5dImP3nwDE0PCy0IN7dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJjkkz%2FbtsHxQWdndN%2FSl5dImP3nwDE0PCy0IN7dk%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;962&quot; height=&quot;442&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;스레싱과&amp;nbsp;작업&amp;nbsp;집합&amp;gt; &lt;br&gt;-&amp;nbsp;스레싱&amp;nbsp;발발&amp;nbsp;원인&amp;nbsp;설명에&amp;nbsp;작업&amp;nbsp;집합&amp;nbsp;모델&amp;nbsp;활용 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1968년&amp;nbsp;Denning의&amp;nbsp;논문(Thrashing&amp;nbsp;:&amp;nbsp;its&amp;nbsp;causes&amp;nbsp;and&amp;nbsp;prevention) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스레싱의&amp;nbsp;원인&amp;nbsp;설명에&amp;nbsp;'작업&amp;nbsp;집합'&amp;nbsp;모델&amp;nbsp;사용 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;처음&amp;nbsp;스레싱&amp;nbsp;관측 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1968년&amp;nbsp;처음으로&amp;nbsp;작업&amp;nbsp;집합&amp;nbsp;모델로&amp;nbsp;스레싱&amp;nbsp;현상을&amp;nbsp;설명 &lt;br&gt;&lt;br&gt;-&amp;nbsp;스레싱&amp;nbsp;예방 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;스레싱은&amp;nbsp;작업&amp;nbsp;집합이&amp;nbsp;메모리에&amp;nbsp;올라와&amp;nbsp;있지&amp;nbsp;않을&amp;nbsp;때&amp;nbsp;발생 &lt;br&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;1968년&amp;nbsp;Denning,&amp;nbsp;실험으로&amp;nbsp;증명 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;예방책&amp;nbsp;제시&amp;nbsp;-&amp;nbsp;각&amp;nbsp;프로세스에게&amp;nbsp;작업&amp;nbsp;집합에&amp;nbsp;포함하는&amp;nbsp;페이지들을&amp;nbsp;적재할&amp;nbsp;충분한&amp;nbsp;메모리&amp;nbsp;할당 &lt;/p&gt;</description>
      <category>운영체제</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/209</guid>
      <comments>https://gotjs815.tistory.com/209#entry209comment</comments>
      <pubDate>Wed, 22 May 2024 18:57:54 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boots First Application</title>
      <link>https://gotjs815.tistory.com/208</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Spring&amp;nbsp;Boot&amp;nbsp;Maven&amp;nbsp;Plugin&amp;gt; &lt;br /&gt;-&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;Maven&amp;nbsp;Plugin은&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;지원을&amp;nbsp;제공한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;프로젝트를&amp;nbsp;실행가능한&amp;nbsp;jar&amp;nbsp;파일이나&amp;nbsp;war&amp;nbsp;파일로&amp;nbsp;패키지(package) &lt;br /&gt;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;애플리케이션&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp;&amp;nbsp;3.&amp;nbsp;Build&amp;nbsp;정보&amp;nbsp;생성 &lt;br /&gt;&amp;nbsp;&amp;nbsp;4.&amp;nbsp;통합&amp;nbsp;테스트를&amp;nbsp;하기&amp;nbsp;전에&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;애플리케이션을&amp;nbsp;시작 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Goals&amp;gt; &lt;br /&gt;-&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;Plugin은&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;goal들을&amp;nbsp;가지고&amp;nbsp;있다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;spring-boot:build-image&amp;nbsp;:&amp;nbsp;OCI&amp;nbsp;imae로&amp;nbsp;패키지 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;spring-boot:build-info&amp;nbsp;:&amp;nbsp;build-info.properties&amp;nbsp;파일&amp;nbsp;생성 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;spring-boot:repackage&amp;nbsp;:&amp;nbsp;Repackage,&amp;nbsp;Jar&amp;nbsp;나&amp;nbsp;War&amp;nbsp;파일로&amp;nbsp;재패키지 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;spring-boot:run&amp;nbsp;:&amp;nbsp;현재&amp;nbsp;위치에서&amp;nbsp;애플리케이션을&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;spring-boot:start&amp;nbsp;:&amp;nbsp;Spring&amp;nbsp;애플리케이션을&amp;nbsp;시작,&amp;nbsp;&quot;run&quot;&amp;nbsp;goal과&amp;nbsp;달리&amp;nbsp;애플리케이션&amp;nbsp;작동을&amp;nbsp;block하지&amp;nbsp;않고&amp;nbsp;다른&amp;nbsp;goal들을&amp;nbsp;허용 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;spring-boot:stop&amp;nbsp;:&amp;nbsp;&quot;start&quot;&amp;nbsp;goal로&amp;nbsp;시작된&amp;nbsp;애플리케이션을&amp;nbsp;종료 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Packaging&amp;gt; &lt;br /&gt;-&amp;nbsp;&quot;repackage&quot;&amp;nbsp;goal로&amp;nbsp;프로젝트를&amp;nbsp;실행가능한&amp;nbsp;jar/war&amp;nbsp;파일로&amp;nbsp;패키지한다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Component&amp;nbsp;Scan&amp;gt; &lt;br /&gt;-&amp;nbsp;설정&amp;nbsp;정보(AppConfig.class)없이&amp;nbsp;자동으로&amp;nbsp;스프링&amp;nbsp;빈을&amp;nbsp;등록하는&amp;nbsp;컴포넌트&amp;nbsp;스캔&amp;nbsp;기능을&amp;nbsp;제공한다 &lt;br /&gt;-&amp;nbsp;스프링&amp;nbsp;빈을&amp;nbsp;등록할&amp;nbsp;때는&amp;nbsp;의존관게를&amp;nbsp;자바&amp;nbsp;코드로&amp;nbsp;직접&amp;nbsp;등록하는&amp;nbsp;방법과&amp;nbsp;컴포넌트&amp;nbsp;스캔과&amp;nbsp;자동&amp;nbsp;의존관계&amp;nbsp;설정하는&amp;nbsp;@Autowired를&amp;nbsp;사용하는&amp;nbsp;방법이&amp;nbsp;있다 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;ex)&amp;nbsp;@ComponentScan은&amp;nbsp;탐색&amp;nbsp;위치에&amp;nbsp;@Component가&amp;nbsp;붙은&amp;nbsp;모든&amp;nbsp;클래스를&amp;nbsp;스프링&amp;nbsp;빈으로&amp;nbsp;등록한다 &lt;br /&gt;@SpringBootApplication( &lt;br /&gt;scanBasePackages={&amp;rdquo;kr.ac.hansung.cse.hellospringboot&amp;rdquo;, &lt;br /&gt;&amp;ldquo;com.mypackage.springapp&amp;rdquo;,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;kr.ac.hansung.iot&amp;rdquo;}&amp;nbsp;&amp;nbsp;) &lt;br /&gt;public&amp;nbsp;class&amp;nbsp;HelloSpringBootApplication&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SpringApplication.run(HelloSpringBootApplication.class,&amp;nbsp;args); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Templates&amp;gt; &lt;br /&gt;-&amp;nbsp;템플릿(Templates)은&amp;nbsp;자바&amp;nbsp;코드를&amp;nbsp;삽입할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;HTML형식의&amp;nbsp;파일이며,&amp;nbsp;일반적으로&amp;nbsp;많이&amp;nbsp;사용하는&amp;nbsp;방식이다 &lt;br /&gt;-&amp;nbsp;스프링부트에서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;템플릿&amp;nbsp;엔진에는&amp;nbsp;Thymeleaf,&amp;nbsp;Mustache,&amp;nbsp;Groovy,&amp;nbsp;Freemarker,&amp;nbsp;Velocity등이&amp;nbsp;있다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;템플릿&amp;nbsp;엔진&amp;gt; &lt;br /&gt;-&amp;nbsp;코드&amp;nbsp;제너레이션&amp;nbsp;또는&amp;nbsp;시스템에서&amp;nbsp;만들어&amp;nbsp;놓은&amp;nbsp;이메일&amp;nbsp;템플릿에&amp;nbsp;파라미터만&amp;nbsp;넣어&amp;nbsp;변경하는&amp;nbsp;등&amp;nbsp;여러&amp;nbsp;가지&amp;nbsp;상황에&amp;nbsp;맞게&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Application&amp;nbsp;Properties&amp;gt; &lt;br /&gt;-&amp;nbsp;By&amp;nbsp;default,&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;will&amp;nbsp;load&amp;nbsp;properties&amp;nbsp;from&amp;nbsp;☆&quot;application.properties&quot; &lt;br /&gt;-&amp;nbsp;ex) &lt;br /&gt;#&amp;nbsp;Can&amp;nbsp;add&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;properties &lt;br /&gt;server.port=9000 &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;set&amp;nbsp;context&amp;nbsp;path &lt;br /&gt;server.servlet.context-path=/helloSpringBoot&amp;nbsp;&amp;nbsp;--&amp;gt;http://localhost:9000/helloSpringBoot/customer &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;logging.level.&amp;lt;logger-name&amp;gt;=&amp;lt;level&amp;gt; &lt;br /&gt;logging.level.kr.ac.hansung=debug &lt;br /&gt;//logging&amp;nbsp;level&amp;nbsp;:&amp;nbsp;trace,&amp;nbsp;debug,&amp;nbsp;info,&amp;nbsp;warn,&amp;nbsp;error &lt;br /&gt;&lt;br /&gt;#&amp;nbsp;add&amp;nbsp;our&amp;nbsp;own&amp;nbsp;custom&amp;nbsp;properties &lt;br /&gt;app.professor=Namyun&amp;nbsp;Kim &lt;br /&gt;app.course=Web&amp;nbsp;Framework &lt;br /&gt;-&amp;gt;&amp;nbsp;custom은&amp;nbsp;객체에&amp;nbsp;있는&amp;nbsp;필드에&amp;nbsp;바인딩&amp;nbsp;해준다 &lt;br /&gt;&lt;br /&gt;ex)&amp;nbsp; &lt;br /&gt;#configure&amp;nbsp;my&amp;nbsp;props &lt;br /&gt;&lt;br /&gt;app.professor=&amp;nbsp;Namyun&amp;nbsp;Kim &lt;br /&gt;app.course=Web&amp;nbsp;Framework &lt;br /&gt;일&amp;nbsp;때,&amp;nbsp;☆&quot;@Value&quot;라는&amp;nbsp;Annotation을&amp;nbsp;사용 &lt;br /&gt;&lt;br /&gt;@RestController &lt;br /&gt;public&amp;nbsp;class&amp;nbsp;HelloWorldController&amp;nbsp;{ &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Value(&quot;${app.professor}&quot;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;String&amp;nbsp;professorName; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Value(&quot;${app.course}&quot;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;String&amp;nbsp;courseName; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;hellip; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>웹프레임워크</category>
      <author>햏치</author>
      <guid isPermaLink="true">https://gotjs815.tistory.com/208</guid>
      <comments>https://gotjs815.tistory.com/208#entry208comment</comments>
      <pubDate>Wed, 22 May 2024 17:02:30 +0900</pubDate>
    </item>
  </channel>
</rss>