<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>살아남자</title>
    <link>https://341123.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 25 Aug 2026 12:49:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>피클s</managingEditor>
    <image>
      <title>살아남자</title>
      <url>https://tistory1.daumcdn.net/tistory/5027561/attach/7a7a909834e94d22839667e415b703fe</url>
      <link>https://341123.tistory.com</link>
    </image>
    <item>
      <title>2022년을 돌아보며</title>
      <link>https://341123.tistory.com/74</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;벌써 12월이 돌아왔다. &lt;br /&gt;이 시기라면 두꺼운 옷을 입기 마련인데 올해는 무척 따뜻하다.&lt;br /&gt;이상기후의 여파가 두렵지만 할 수 있는 일은 없다. 타노스가 옳았어! &lt;br /&gt;개소리는 집어치우고 올해는 개인적으로 새로운 일들을 많이 시도해보았다.&lt;br /&gt;내년에도 이어가서 지금까지 못 해본 경험들을 하고싶다. &lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;방송대&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터과학과에 편입했다. 학원출신이라 무시당하니 전공하면 얼마나 다른데 하며 시작했다. 확실히 기본기에 대해 배울 수 있었고 재미는 있는데 일하면서 6과목은 너무 힘들다. 제대로 하려니 시간이 부족해져서 강의보고 기출문제 푸는 방식으로 이번 학기는 넘기려한다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;PT&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;로또당첨 되면 제일 먼저 하고싶었는데 당첨될 기미가 없어서 나돈 주고 시작했다. 넘&amp;nbsp;&amp;nbsp;비싸 피눈물이 난다. 내년에는 뱃살없는 아저씨가 되어야겠다. 확실히 돈주고 배우니 다른 것 같다. 돈아깝다는 사람이 많지만 처음이라면 한 번 쯤은 들어볼만 하다생각한다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;피아노&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;몇 년전부터 피아노 배우고 싶다는 욕구가 있었는데 드디어 시작했다. 생각보다 잘 안되서 힘든데 즐겁다. 그러면 된 것이겠지&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;연애&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;어...음...&amp;nbsp;&amp;nbsp;인기 있을 외모나 성격이 아니기에 반쯤 포기했다. 가끔 외로울 때는 있지만 좋은 점도 있다. 내가 컨트롤 할 수 없는 외부 스트레스가 어마어마하게 줄었다. 마음이 평화롭다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;Oled tv&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;48인치를 샀다. 원룸에서 쓰기에 충분하고 눈호강도 할 수 있어서 행복했다. 만족&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;갤럭시 폴드&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아이폰 아이패드 갤패드 모두 처분하고 폴드 하나로 쓸 수 있었다. 내구성이 걱정이다. 이 친구는 오래오래 갔으면 한다. 만족&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;HD660S&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;비싼 헤드폰을 샀는데 잘 모르겠다. 좋긴한데 이 돈 주고?&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;맥북 프로&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;중고로 구매했으나 다시 중고로 팔았다. 집에서는 개발 하게 안되더라. 방송대 숙제는 윈도우에서만 가능하더라.. 필요없는 건 알지만 언제나 갖고 싶은 녀석이다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;옷&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;싸구려 옷을 몇 벌 사보고 느꼈다. 제대로 된 옷을 사자. 무신사에서 소개하는 코디들은 전브 별로였다. 펑퍼짐한게 트랜드라지만 내 취향은 아니었다. 옷알못이라 맨땅에 해딩하면서 배울 수 밖에.&lt;br /&gt;몇 가지 브랜드를 정하고 구입해보았다. 깔끔한 스타일을 유지하고 싶다. 셔츠는 웅가로 바지큰 타미힐피거. &lt;br /&gt;커스텀 디자인 후드티도 사보았다. 디자인은 내맘대로 할 수 있어서 좋았는데 몇 번 빨고나니 10년은 입은 것 처럼 변해서 아쉽다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;여행&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;갑자기 바다가 보고싶어 렌트카를 타고 속초에 갔다. 운전 안한지 오래되서 긴장을 많이 했다. 사고 위기도 있어서 아찔했다. 당일치기로 다녀와서 도착하자마자 출발해야했다. 다음에는 느긋하게 갈 수 있도록 일정을 잡아야겠다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;스투키&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 돈 주고 식물을 사는 건 또 처음이다. 6뿌리를 샀는데 하나씩 병들기 시작하더니 3뿌리는 썩어서 버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 그랬을까 고민해보니 에어콘이 문제었던 것 같다. 창가에 내어 에어콘 바람을 피하게 하고 한 달 한번 주던 물을 2달에 한 번으로 줄였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 3뿌리는 무사히 살고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 신경안쓰고 있는 사이에 새싹이 자라난 것을 발견했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얘들도 생명이었구나! 신기하고 기특했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;올해는 유혹에 홀라당 넘어가 돈을 너무 많이 썼다.&lt;br /&gt;내년에는 물건보다 새로운 경험을 늘이고 싶다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스키&lt;/li&gt;
&lt;li&gt;스카이다이빙&lt;/li&gt;
&lt;li&gt;제주도 여행&lt;/li&gt;
&lt;li&gt;연애?&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>일상/일기</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/74</guid>
      <comments>https://341123.tistory.com/74#entry74comment</comments>
      <pubDate>Thu, 24 Nov 2022 08:57:47 +0900</pubDate>
    </item>
    <item>
      <title>모델링과 시뮬레이션</title>
      <link>https://341123.tistory.com/73</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;시스템과 모델&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실시스템 -&amp;gt; 모델링 -&amp;gt; 모델 -&amp;gt; 시뮬레이션 -&amp;gt; 시뮬레이터&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시뮬레이션 모델의 이용 범주&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설명적장치 : 시스템이나 문제를 정의&lt;/li&gt;
&lt;li&gt;분석도구 : 한계적 구성요소를 결정&lt;/li&gt;
&lt;li&gt;설계평가도구 : 제안된 해결방안을 종합하고 평가&lt;/li&gt;
&lt;li&gt;예측도구 : 미래의 개발계획을 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시스템&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 목적을 위하여 하나 이상 서로 관련된 구성요소들이 결합된 집합&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시스템의 범위 결정&lt;/li&gt;
&lt;li&gt;외적 요인들 : 포함하거나, 무시하거나, 입력변수로 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 설계&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쉬운 경우&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물리적 규칙이 이용 가능하다.&lt;/li&gt;
&lt;li&gt;도형적 표현이 가능하다.&lt;/li&gt;
&lt;li&gt;입력/출력/구성요소의 변화가 통제가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;어려운 경우&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 규칙이 없다.&lt;/li&gt;
&lt;li&gt;표현하기 어려운 많은 절차적 요소.&lt;/li&gt;
&lt;li&gt;랜덤 구성 요소&lt;/li&gt;
&lt;li&gt;정량화가 어려운 정책적인 요소&lt;/li&gt;
&lt;li&gt;인간의 의사결정이 큰 영향을 주는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델링&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;구성요소들 간의 관계 표현&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델작성 목적 수립&lt;/li&gt;
&lt;li&gt;시스템 영역 확정&lt;/li&gt;
&lt;li&gt;모델 상세성 확정&lt;/li&gt;
&lt;li&gt;평가척도 및 재설계&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시뮬레이션 모델의 종류&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결정적 모델과 확률적 모델 : 확률변수의 존재 유무로 판별&lt;/li&gt;
&lt;li&gt;정적 모델과 동적 모델 : 시간의 흐름에 따라 변하는지로 판별&lt;/li&gt;
&lt;li&gt;이산 모델과 연속 모델 : 데이터가 연속적인가&lt;/li&gt;
&lt;li&gt;물리적 모델과 수리적 모델 : 현실에 모형을 만들었는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;몬테칼로 시뮬레이션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜덤값을 이용하여 함수의 값을 계산하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 파이 값 구하기.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시뮬레이션 특징과 과정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제 구축 없이 예측 평가 가능&lt;/li&gt;
&lt;li&gt;해석적 방법이 불가능한 경우 실험적 대안&lt;/li&gt;
&lt;li&gt;비용이 높고 위험한 경우&lt;/li&gt;
&lt;li&gt;다양한 환경 설정과 반복실험 가능&lt;/li&gt;
&lt;li&gt;장시간, 단시간 시스템 연구가 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시뮬레이션 과정&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;문제 정의&lt;/li&gt;
&lt;li&gt;모델 설계&lt;/li&gt;
&lt;li&gt;자료 수집&lt;/li&gt;
&lt;li&gt;모델 변환 : 컴퓨터 처리 형태로 변환&lt;/li&gt;
&lt;li&gt;검증 : 컴퓨터 프로그램이 정확한가?&lt;/li&gt;
&lt;li&gt;타당성 검토 : 실시스템과 모델이 일치한가?&lt;/li&gt;
&lt;li&gt;실험계획 수립&lt;/li&gt;
&lt;li&gt;실험&lt;/li&gt;
&lt;li&gt;결과 분석&lt;/li&gt;
&lt;li&gt;구현 및 문서화&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>방송대/시뮬레이션</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/73</guid>
      <comments>https://341123.tistory.com/73#entry73comment</comments>
      <pubDate>Sun, 2 Oct 2022 20:20:05 +0900</pubDate>
    </item>
    <item>
      <title>텍스트 편집</title>
      <link>https://341123.tistory.com/72</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;편집기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리눅스와 텍스트 파일&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리눅스 시스템에서 중요한 설정 정보나 셸 스크립트가 텍스트 파일로 존재함.&lt;/li&gt;
&lt;li&gt;텍스트파일은 공유가 쉽고 간편하게 편집가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리눅스 편집기 종류&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gedit : GNOME 데스크톱에서 제공&lt;/li&gt;
&lt;li&gt;emacs : 화면 단위 편집기로 다양한 기능을 제공하나 사용법이 어려움&lt;/li&gt;
&lt;li&gt;vi : 가장 보편적인 화면 편집기&lt;/li&gt;
&lt;li&gt;vim : vi의 개선버전. 마우스, 다중 undo, 다중탭을 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;vi 편집기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;vi 명령어&lt;/h3&gt;
&lt;pre id=&quot;code_1664105322734&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi [options] [fimename]&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모드&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령모드 : 커서이동, 삭제, 복사/붙여넣기 등&lt;/li&gt;
&lt;li&gt;라인모드 : 저장, 검색, 대치(:, /, ? 으로 진입)&lt;/li&gt;
&lt;li&gt;입력모드 : 텍스트 입력모드. (i, a, o, c 로 진입, esc로 명령모드로 변환)&lt;/li&gt;
&lt;li&gt;비주얼모드 : 블록 지정해서 복사 / 삭제 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;종료&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ZZ : 명령모드에서 종료&lt;/li&gt;
&lt;li&gt;:q : 변경내용이 없다면 종료&lt;/li&gt;
&lt;li&gt;:q! : 저장하지 않고 강제 종료&lt;/li&gt;
&lt;li&gt;:wq : 저장하고 종료&lt;/li&gt;
&lt;li&gt;:x [filename] : 새로운 파일이름으로 저장하고 종료&lt;/li&gt;
&lt;li&gt;:x! [filename] : 같은 파일 이름이 있다면 덮어씀&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;텍스트 입력&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;a : 현재 커서 위치의 오른쪽부터 텍스트 추가&lt;/li&gt;
&lt;li&gt;A : 현재 라인의 끝에 텍스트 추가&lt;/li&gt;
&lt;li&gt;i : 현재 커서 위치부터 택스트 삽입&lt;/li&gt;
&lt;li&gt;I : 현재 라인의 처음에 텍스트 삽입&lt;/li&gt;
&lt;li&gt;o : 현재 라인의 아래에 새로운 줄을 만들고 삽입&lt;/li&gt;
&lt;li&gt;O : 현재 라인의 위에 새로운 줄을 만들고 삽입&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;커서 이동&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hjkl : &amp;larr;&amp;darr;&amp;uarr;&amp;rarr;&lt;/li&gt;
&lt;li&gt;Ctrl+f, Ctrl+b : 페이지 업, 페이지 아운&lt;/li&gt;
&lt;li&gt;w : 다음 단어의 첫 자로 이동&lt;/li&gt;
&lt;li&gt;b : 앞 단어의 첫 자로 이동&lt;/li&gt;
&lt;li&gt;0 : 현재 라인의 첫 칸으로 이동&lt;/li&gt;
&lt;li&gt;$ : 현재 라인의 마지막 칸&lt;/li&gt;
&lt;li&gt;숫자G : 숫자 번째 라인으로 이동&lt;/li&gt;
&lt;li&gt;G : 가장 마지막 라인으로 이동&lt;/li&gt;
&lt;li&gt;숫자j : 현재 라인에서 아래로 숫자만큼 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;텍스트 삭제&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x : 커서 위치의 한 문자 삭제&lt;/li&gt;
&lt;li&gt;dw : 커서 위치부터 다음 단어 전까지 삭제&lt;/li&gt;
&lt;li&gt;d$ 또는 D : 커서의 위치부터 현재 라인의 끝까지 삭제&lt;/li&gt;
&lt;li&gt;d0 : 커서 왼쪽부터 현재 라인의 처음까지 삭제&lt;/li&gt;
&lt;li&gt;dd : 현재 라인 삭제&lt;/li&gt;
&lt;li&gt;dG : 현재 라인부터 파일 끝까지 삭제&lt;/li&gt;
&lt;li&gt;d숫자G : 현재 라인부터 라인 번호 숫자 까지 삭제&lt;/li&gt;
&lt;li&gt;숫자dw : 커서 위치부터 숫자 단어 삭제&lt;/li&gt;
&lt;li&gt;숫자dd : 현재 라인부터 숫자 라인 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;텍스트 변경&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;r : 커서 위치의 한 문자를 대치.&lt;/li&gt;
&lt;li&gt;R : 커서의 위치부터 계속 대치할 수 있고 입력모드로 전환&lt;/li&gt;
&lt;li&gt;s 또는 cl : 커너 위치의 문자가 삭제되고 입력모드로 전환&lt;/li&gt;
&lt;li&gt;S 또는 cc : 현재 라인에 존재하는 문자가 삭제되고 현재 라인에서 입력모드 전환&lt;/li&gt;
&lt;li&gt;cw : 커서 위치부터 단어의 끝까지 삭제되고 입력모드 전환&lt;/li&gt;
&lt;li&gt;cb : 커서 왼쪽부터 단어의 앞까지 삭제되고 입력모드 전환&lt;/li&gt;
&lt;li&gt;c) : 커서 위치부터 문장의 끝까지 삭제되고 입력모드 전환&lt;/li&gt;
&lt;li&gt;c} : 커서 위치부터 문단의 끝까지 삭제되고 입력모드 전환&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;복사/붙여넣기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dd 명령과 같은 삭제 명령 후 붙여넣기 할 수 있다. 사실상 잘라내기/붙여넣기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;yy : 라인 복사&lt;/li&gt;
&lt;li&gt;숫자yy : 현재 라인부터 숫자 라인 복사&lt;/li&gt;
&lt;li&gt;yw : 커서 위치부터 다음단어 앞까지 복사&lt;/li&gt;
&lt;li&gt;y$ : 커서 위치부터 라인 끝까지 복사&lt;/li&gt;
&lt;li&gt;y0 : 커서 왼쪽부터 라인 앞까지 복사&lt;/li&gt;
&lt;li&gt;y^ : 위와 같으나 라인 앞의 빈킨은 복사하지 않음&lt;/li&gt;
&lt;li&gt;yG : 현재 라인부터 파일 끝까지 복사&lt;/li&gt;
&lt;li&gt;y) : 커서 위치부터 한 문장 복사&lt;/li&gt;
&lt;li&gt;y} : 커서 위치부터 한 문단을 복사&lt;/li&gt;
&lt;li&gt;p : 아래 라인에 붙여넣기&lt;/li&gt;
&lt;li&gt;P : 윗 라인에 붙여넣기&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;블록 지정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록을 지정하고 y(복사) / x(삭제) 후 p를 이용해서 붙여넣기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;v : 비주얼 모드에서 한 번에 한 문자씩 선택&lt;/li&gt;
&lt;li&gt;V : 비주얼 모드에서 한 번에 한 라인씩 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;명령 취소 및 기타 명령&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;u : 실행 취소 undo&lt;/li&gt;
&lt;li&gt;Ctrl + r : 실행 취소를 취소 redo&lt;/li&gt;
&lt;li&gt;:e! : 마지막으로 저장한 후의 작업을 취소하고 다시 작업&lt;/li&gt;
&lt;li&gt;:n : n번째 라인으로 이동&lt;/li&gt;
&lt;li&gt;J 또는 :j : 현재 라인과 아래 라인을 합침&lt;/li&gt;
&lt;li&gt;:!command : 쉘 명령 command를 수행&lt;/li&gt;
&lt;li&gt;:sh : vi를 빠져나가 쉘 명령을 수행. exit를 입력하면 vi로 돌아옴&lt;/li&gt;
&lt;li&gt;:se nu : 왼쪽에 라인 번호 표시&lt;/li&gt;
&lt;li&gt;Ctrl + g : 화면 하단에 파일 이름, 전체 라인 수, 현재 라인의 상대 위치를 퍼센티지로 표시&lt;/li&gt;
&lt;li&gt;:r filename : 지정된 파일의 내용을 읽어 현재 커서의 아래 줄에 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;검색&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f문자 : 한 라인에서&amp;nbsp;해당 문자를 커서 다음 위치부터 찾음&lt;/li&gt;
&lt;li&gt;; : 한 라인에서 검색을 반복&lt;/li&gt;
&lt;li&gt;/패턴 : 순방향(커서 뒤, 아래 방향)으로 패턴을 검색하여 커서를 이동&lt;/li&gt;
&lt;li&gt;/패턴/ + 숫자 : 패턴을 검색하고 그 뒤(+) 숫자 번째 라인으로 이동&lt;/li&gt;
&lt;li&gt;?패턴 : 역방향으로 패턴을 검색하여 커서 이동&lt;/li&gt;
&lt;li&gt;?패턴?-숫자 : 패턴을 검색하고 그 앞(-) 숫자 번째 라인으로 이동&lt;/li&gt;
&lt;li&gt;n : 이전 검색을 같은 방향으로 반복&lt;/li&gt;
&lt;li&gt;N : 이전 검색을 반대 방향으로 반복&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;검색과 대치&lt;/h3&gt;
&lt;pre id=&quot;code_1664108377643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;:[g][address]s/패턴/대치문자[/옵션]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[g][address] : 검색 범위로, %는 파일 전체, 없으면 커서 다음 나오는 검색 대상 한번만, g는 커서 다음부터 파일 마지막 까지&lt;/li&gt;
&lt;li&gt;s는 패턴을 찾아 대치하라는 명령&lt;/li&gt;
&lt;li&gt;[/옵션] : 옵션이 없다면 한 번만 대치, /g를 한다면 모든 패턴 대치&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;:s/패턴/대치 : 커서가 위치한 라인에서 첫 번째 등장하는 패턴을 대치&lt;/li&gt;
&lt;li&gt;%s/패턴/대치 : 파일 전체에서 첫 번째 등장하는 패턴에 대하여 대치&lt;/li&gt;
&lt;li&gt;:%s/패턴/대치/g : 파일 전체에 등장하는 모든 패턴을 대치&lt;/li&gt;
&lt;li&gt;:1,10s/패턴/대치/g : 1~10 라인에 등장하는 모든 패턴을 대치&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파일 찾기와 문자열 검색&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;locate 명령&lt;/h3&gt;
&lt;pre id=&quot;code_1664108404236&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;locate [option] pattern&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열 패턴이 (기본적으로 /로 시작하는) 파일 이름에 포함될 때, 해당 파일의 이름을 출력하는 명령&lt;/li&gt;
&lt;li&gt;절대 경로 상의 디렉터리나 파일 이름에 문자열이 포함되면 출력한다.&lt;/li&gt;
&lt;li&gt;-b 옵션 : 마지막 이름만 검색&lt;/li&gt;
&lt;li&gt;접근 불가 파일은 출력 안됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;find 명령&lt;/h3&gt;
&lt;pre id=&quot;code_1664108636393&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;find [pathnames] [expression]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 위치에서 조건에 맞는 파일 찾고 명령을 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 이름, 소유자, 접근권한, 크기, 수정시간 등의 속성을 조건으로 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pathname을 지정하지 않으면 현재 디렉터리와 서브 디렉터리를 기준으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;expressrion이 주어지지 않으면 -print 가 주어진다.(검색된 파일 절대경로가 출력)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find /etc -iname '*passwd*'&amp;nbsp; : 이름에 passwd를 포함하는 파일을 찾음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find ~ | wc -l : 사용자가 가지고 있는 파일의 총 개수를 출력 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;fine 조건지정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-cname n :&amp;nbsp; 파일 또는 디렉터리 내용이나 파일 속성의 마지막 수정시간이 정확히 n분인 경우&lt;/li&gt;
&lt;li&gt;-cname -n :&amp;nbsp; 파일 또는 디렉터리 내용이나 파일 속성의 마지막 수정시간이 n분보다 작은 경우&lt;/li&gt;
&lt;li&gt;-cname +n :&amp;nbsp; 파일 또는 디렉터리 내용이나 파일 속성의 마지막 수정시간이 n분보다 큰 경우&lt;/li&gt;
&lt;li&gt;-cnewer file : 파일 또는 디렉터리의 내용이나 파일 속성의 마지막 수정시간이 지정된 file보다 최근 것임을 의미&lt;/li&gt;
&lt;li&gt;-empty : 파일 또는 디렉터리가 비어 있는 조건&lt;/li&gt;
&lt;li&gt;-name pattern : 파일 또는 디렉터리 이름이 패턴과 매칭되는 경우&lt;/li&gt;
&lt;li&gt;-iname pattern : 대소문자를 구분하지 않고 이름이 매칭되는 파일&lt;/li&gt;
&lt;li&gt;-nouser : 파일 또는 디렉터리가 유효한 사용자에 속해 있지 않은 경우&lt;/li&gt;
&lt;li&gt;-perm mode : 파일 또는 디렉터리의 접근권한이 모드와 같은 경우로 8진수 표기법이나 기호 표기법으로 표시&lt;/li&gt;
&lt;li&gt;-size n : 파일 또는 디렉터리의 크기가 n인 조건. b(512바이트 블록), c(바이트), k(킬로바이트), M(메가), G(기가) ...&lt;/li&gt;
&lt;li&gt;-type c : 파일 타입 b (블록 디바이스), c(문자 디바이스), d(디렉터리), f(정규파일), l(심볼릭 링크) 등이 있음&lt;/li&gt;
&lt;li&gt;-user name : 소유자 이름이나 UID의 파일 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;find 명령 액션&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-delete : 파일 삭제&lt;/li&gt;
&lt;li&gt;-ls : 파일 정보 자세히&amp;nbsp;&lt;/li&gt;
&lt;li&gt;-print : 경로 포함하여 출력&lt;/li&gt;
&lt;li&gt;-quit : 매칭되는 것이 있다면 종료&lt;/li&gt;
&lt;li&gt;-exec command {} ; : 임의의 command를 수행한다. -ok 를 사용하면 확인 과정을 거친다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;grep 명령&lt;/h3&gt;
&lt;pre id=&quot;code_1664109747791&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grep [options] pattern [files]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일에서 지정된 문자열 패턴을 포함한 라인을 찾아 출력&lt;/li&gt;
&lt;li&gt;-r : 디렉터리가 지정될 때 모든 파일을 대상으로 검색&lt;/li&gt;
&lt;li&gt;-i : 대소문자 구별 없음&lt;/li&gt;
&lt;li&gt;-V : 매칭이 일어나지 않는 라인 출력&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>방송대/UNIX시스템</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/72</guid>
      <comments>https://341123.tistory.com/72#entry72comment</comments>
      <pubDate>Sun, 25 Sep 2022 21:43:24 +0900</pubDate>
    </item>
    <item>
      <title>사용자 관리</title>
      <link>https://341123.tistory.com/71</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용자 계정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 계정은 UID를 가진다.&lt;/li&gt;
&lt;li&gt;관리자는 계정별로 접근권한을 통제할 수 있다.&lt;/li&gt;
&lt;li&gt;root 계정은 UID가 0이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;su 명령&lt;/h3&gt;
&lt;pre id=&quot;code_1664004597748&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;su [-[l]] [username]
ex) su -l asdf&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-l 또는 - 옵션으로 지정된 사용자의 로그인 셸을 시작시킨다.&lt;/li&gt;
&lt;li&gt;-l 옵션이 없으면 로그인 셸이 아니며, 자업 디렉터리도 바뀌지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1개의 셸 명령을 root 계정으로 실행하는 명령&lt;/h3&gt;
&lt;pre id=&quot;code_1664004736342&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;su -c '커맨드'
ex) su -c 'ls -al /root/*'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;sudo 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;root 또는 다른 사용자가 되어 명령을 실행하기 위한 명령&lt;/p&gt;
&lt;pre id=&quot;code_1664004806837&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo [-u username] command
ex) sudo -u asdf touch ~/test.txt&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본인의 암호만 필요하며, root 계정의 암호를 요구하지 않는다.&lt;/li&gt;
&lt;li&gt;특정 사용자나 그룹 별로 세세한 권한을 부여할 수 있다.&lt;/li&gt;
&lt;li&gt;/etc/sudoers 파일에 권한 설정이 정의 되어 있다.&lt;/li&gt;
&lt;li&gt;현재 셸에서 수행되므로 명령어 부분에 따옴표가 필요 없다.&lt;/li&gt;
&lt;li&gt;-u 옵션을 사용하면 root 사용자가 아닌 특정 사용자로 수행한다.&lt;/li&gt;
&lt;li&gt;sudo -l은 자신에게 sudo 를 통해 허용된 명령을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용자 계정 만들기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;useradd 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 계정을 만드는 관리자 명령&lt;/p&gt;
&lt;pre id=&quot;code_1664005248508&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;useradd [options] username
ex) useradd -c &quot;a b c&quot; sbc&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-c 는 계정 설명이다.&lt;/li&gt;
&lt;li&gt;psswd [username] 명령으로 비밀번호를 설정할 수 있다.&lt;/li&gt;
&lt;li&gt;useradd -D 명령은 계정을 생성할 때 사용되는 홈 디렉터리같은 기본 설정을 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용자 계정의 생성 절차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/etc/login.defs 파일과 /etc/default/useradd 파일을 읽어서 사용자 계정 생성과 관련된 기본값을 확인한다.&lt;/li&gt;
&lt;li&gt;useradd 명령어에서 주어진 옵션을 검사하여 기본값을 대체할 것인지 확인한다.&lt;/li&gt;
&lt;li&gt;/etc/passwd파일과 /etc/shadow 파일에 새로운 사용자 계정에 해당하는 항목을 생성한다.&lt;/li&gt;
&lt;li&gt;/etc/group 파일에 새로운 그룹에 해당하는 항목을 추가한다.&lt;/li&gt;
&lt;li&gt;/home/디렉터리에서 사용자 계정의 홈 디렉터리를 생성한다.&lt;/li&gt;
&lt;li&gt;/etc/skel/ 디렉터리에 있는 파일을 사용자 계정의 홈 디렉터리에 복사한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/passwd&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 계정에 관한 정보를 가진 텍스트 파일&lt;/li&gt;
&lt;li&gt;계정의 생성이나 수정을 위해 직접 수정하는 것은 좋지 않다.&lt;/li&gt;
&lt;li&gt;각 라인은 콜론으로 구분되는 7개의 필드를 가진다.&lt;/li&gt;
&lt;li&gt;사용자계정:암호:UID:GID:설명:홈디렉터리:기본셸&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/skel&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;홈 디렉터리에 복사되는 파일들을 가짐&lt;/li&gt;
&lt;li&gt;.bash_profile, .bashrc, .bash_logout 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/shadow&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 계정의 암호 정보와 패스워드 에이징 정보를 가진다.&lt;/li&gt;
&lt;li&gt;필드의 의미 &amp;rarr; 사용자 계정:암호화된비밀번호:최종비밀번호변경일:&lt;/li&gt;
&lt;li&gt;페스워드 에이징 : 비밀번호 변경 불가 기간, 변경하지 않고 사용할 수 있는 최대기간 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;chage&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자의 비밀번호 만료에 대한 정보 변경하는 관리자 명렁&lt;/p&gt;
&lt;pre id=&quot;code_1664006104112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chage [options] username&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-ㅣ 유저명 : 자신의 패스워드 에이징 정보를 확인&lt;/li&gt;
&lt;li&gt;-l days : 만료 후 비활성화 되기전까지 날짜&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/login.defs&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 계정을 생성할 때 필요한 기본값을 정의한 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/default/useradd&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useradd 명령이 참조하는 기본값을 설정한 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용자 계정 수정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;usermod&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 계정의 정보를 수정하는 관리자 명령&lt;/li&gt;
&lt;li&gt;useradd와 옵션이 유사함&lt;/li&gt;
&lt;li&gt;-d : 사용자 계정의 홈디렉터리 변경&lt;/li&gt;
&lt;li&gt;-m : -d와 함께 사용되어야 하며 기존 홈디렉터리 내용을 새 디렉터리로 복사함&lt;/li&gt;
&lt;li&gt;-l : 사용자 계정 이름 변경&lt;/li&gt;
&lt;li&gt;-u : UID 변경&lt;/li&gt;
&lt;li&gt;-L : 계정 잠금. /etc/shadow 파일 비밀번호앞에 ! 가 붙음 &lt;/li&gt;
&lt;li&gt;-U : 잠금 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;userdel&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 계정 삭제&lt;/li&gt;
&lt;li&gt;-r : 홈 디렉터리, 파일, 메일도 삭제&lt;/li&gt;
&lt;li&gt;-f : 로그인 중이어도 삭제하며, 같은 이름의 그룹도 삭제한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그룹 계정과 관리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;groupadd&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 계정을 만드는 관리자 명령&lt;/li&gt;
&lt;li&gt;-g : gid를 수동 설정&lt;/li&gt;
&lt;li&gt;-r : 시스템 그룹 계정 생성&lt;/li&gt;
&lt;li&gt;-o : -g와 함께 사용하여 기존 그룹의 GID를 사용한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;/etc/group&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹계정의 정보를 가진 파일&lt;/li&gt;
&lt;li&gt;그룹계정:암호:GID:구성원리스트&lt;/li&gt;
&lt;li&gt;비밀번호는 /etc/gshadow에 저장된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용자 계정과 그룹 및 파일의 접근 권한&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 파일이나 폴더를 생성하면 소유그룹은 사용자의 주 그룹으로 지정된다.&lt;/li&gt;
&lt;li&gt;사용자는 0개 이상의 부그룹에 속할 수 있다.&lt;/li&gt;
&lt;li&gt;사용자 스스로 다른 그룹의 구성원이 될 수 있다.&lt;/li&gt;
&lt;li&gt;newgrp group명 으로 일시적으로 주그룹을 변경할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;gpasswd&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹의 관리자가 그룹 비밀번호 설정하기 위해 사용&lt;/li&gt;
&lt;li&gt;-a : 구성원 추가&lt;/li&gt;
&lt;li&gt;-m : 구성원 삭제&lt;/li&gt;
&lt;li&gt;-A : 그룹관리자 지정&lt;/li&gt;
&lt;li&gt;-r : 비밀번호 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;groupmod&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 그룹 정보 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;groupdel&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 삭제&lt;/li&gt;
&lt;li&gt;사용자가 주그룹으로 설정하고 있으면 삭제할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>방송대/UNIX시스템</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/71</guid>
      <comments>https://341123.tistory.com/71#entry71comment</comments>
      <pubDate>Sat, 24 Sep 2022 17:09:49 +0900</pubDate>
    </item>
    <item>
      <title>변수와 바인딩ㅂ</title>
      <link>https://341123.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;변수의 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램에서 처리할 데이터를 저장/관리할 수 있도록 메모리를 추상화한 것.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변수의 속성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수명 : 변수의 이름. 식별자(identifier)&lt;/li&gt;
&lt;li&gt;타입 : 변수에 저장할 수 있는 데이터 집합의 종류. 자료형&lt;/li&gt;
&lt;li&gt;주소 : 변수가 사용하는 메모리의 위치. 참조 reference&lt;/li&gt;
&lt;li&gt;값 : 변수에 저장된 데이터.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배런의 표기법&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IvK6O/btrMVus30Ii/KXFkw9eHhHMLUKSOX04ayK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IvK6O/btrMVus30Ii/KXFkw9eHhHMLUKSOX04ayK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IvK6O/btrMVus30Ii/KXFkw9eHhHMLUKSOX04ayK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIvK6O%2FbtrMVus30Ii%2FKXFkw9eHhHMLUKSOX04ayK%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;397&quot; height=&quot;283&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;바인딩&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 구성요소의 속성이 구체적으로 결정되는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* : 곱셈 연산자로 바인딩&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int : 4바이트 정수형으로 바인딩&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바인딩 시각&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;바인딩이 일어나는 시점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어의 구성 요소 혹은 속성에 따라 달라진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;언어 정의 시점 : 연산자의 의미, 수의 의미 등&lt;/li&gt;
&lt;li&gt;언어 구현 시점 : 타입의 자릿수, 수의 표기법 등&lt;/li&gt;
&lt;li&gt;컴파일 시점 : 변수의 타입 등&lt;/li&gt;
&lt;li&gt;링크 시점 : 라이브러리 함수의 내용 등&lt;/li&gt;
&lt;li&gt;로드 시점 : 변수의 주소 등. 메모리에 넣는 시점&lt;/li&gt;
&lt;li&gt;프로그램 수행 시점 : 변수의 값 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 바인딩 : 프로그램 실행 전에 결정되고 변화가 없는 바인딩&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램 수행시간의 효율성이 높음&lt;/li&gt;
&lt;li&gt;컴파일 언어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종적 바인딩 : 프로그램 실행 중 일어나고 변화가 있는 바인딩&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유연한 프로그래밍이 가능&lt;/li&gt;
&lt;li&gt;인터프리터 언어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;변수의 바인딩&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수의 속성이 구체적으로 결정 되는 것.&lt;/li&gt;
&lt;li&gt;변수를 사용하기 위해서는 변수의 속성이 바인딩 되어야 한다.(변수명, 타입, 주소, 값)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수명 바인딩 없이 사용되는 경우 &amp;rarr; 포인터 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바인딩 순서&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;변수명
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명시적 선언 : 선언문에 명시된 이름으로 변수명을 바인딩. ex) int x12;&lt;/li&gt;
&lt;li&gt;묵시적 선언 : 선언문 없음. 대입문 등에 처음 사용된 이름으로 변수명을 바인딩. ex) k = 123;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;타입
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명시적 : int x12;&lt;/li&gt;
&lt;li&gt;묵시적 : 변수명이나 대입할 값으로부터 정해지는 타입으로 바인딩&lt;/li&gt;
&lt;li&gt;정적 : 컴파일 시점에 구문 분석을 통해 타입 판단&lt;/li&gt;
&lt;li&gt;동적 : 변수의 타입을 고정하지 않음. 대입할 값에 맞추어 계속 변화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;주소 : 변수가 사용할 메모리가 할당되어 변수의 주소가 그 메모리의 주소로 바인딩 되는 것&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;할당 allocation : 가용한 메모리 중 필요한 만큼의 공간을 변수에 배정하는 것&lt;/li&gt;
&lt;li&gt;해제 deallocation : 할당된 메모리를 변수로부터 회수하는 것&lt;/li&gt;
&lt;li&gt;변수의 수명 : 변수가 메모리를 할당받고 있는 기간&amp;nbsp;&lt;/li&gt;
&lt;li&gt;자동할당 : 선언을 통해 정해진 변수의 타입에 맞추어 필요한 메모리 할당&lt;/li&gt;
&lt;li&gt;수동할당 : 프로그래머가 지정한 크기만큼의 메모리를 할당.&lt;/li&gt;
&lt;li&gt;주소 바인딩을 위한 메모리 구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자동할당 : 상황/언어에 따라 정적 또는 동적 세그먼트 활용&lt;/li&gt;
&lt;li&gt;수동할당 : 동적 세그먼트의 힙&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;정적 바인딩 : 로드 시점에 정적 세그먼트의 주소를 바인딩&lt;/li&gt;
&lt;li&gt;동적 바인딩 : 프로그램 수행 중 변수가 사용되는 시점에 동적 세그먼트의 주소를 바인딩&lt;/li&gt;
&lt;li&gt;정적 변수 : 정적 바인딩을 하는 변수. 수명은 프로그램 수행 전체 기간&lt;/li&gt;
&lt;li&gt;동적 변수 : 동적 바인딩을 하는 변수. 동적 세그먼트의 사용 영역에 따라 구분(스택/힙).
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스택 : 필요한 시점에 할당해제가 자동으로 이루어짐&lt;/li&gt;
&lt;li&gt;힙 : 수동 할당/해제 또는 동적 타입 바인딩을 하는 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;값&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>방송대/프로그래밍언어론</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/70</guid>
      <comments>https://341123.tistory.com/70#entry70comment</comments>
      <pubDate>Sat, 24 Sep 2022 15:45:19 +0900</pubDate>
    </item>
    <item>
      <title>프로그래밍 언어의 구현</title>
      <link>https://341123.tistory.com/69</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로그래밍 언어 정의와 구현&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문 규칙 + 의미 규칙&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구문 규칙 : 어떤 프로그램이 올바른 형태인지 규정하는 것&lt;/li&gt;
&lt;li&gt;의미 규칙 : 올바른 형태의 프로그램을 실행하였을 때 어떻게 실행되는 것이 올바른 것인지 규정하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문 규칙 정의&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문맥 자유 문법, BNF, EBNF, 구문 도표 등&lt;/li&gt;
&lt;li&gt;문맥 자유 문법과 EBNF를 주로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의미 규칙 정의&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능적 의미론, 표기적 의미론, 공리적 의미론&lt;/li&gt;
&lt;li&gt;자연어를 주로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 로봇 제어 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문 규칙&lt;/p&gt;
&lt;pre id=&quot;code_1663995903328&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;program&amp;gt; ::= { forward | left | right }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의미 규칙&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;forward : 로봇이 향하고 있는 방향으로 1만큼 이동&lt;/li&gt;
&lt;li&gt;left: 로봇이 왼편으로 90도 회전&lt;/li&gt;
&lt;li&gt;right : 로봇이 오른편으로 90도 회전&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그래밍 언어 구현&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 언어로 작성된 프로그램을 수행하는 프로그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍 언어 L의 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. PL(언어 L로 작성된 프로그램)이 L의 구문 규칙을 따르는 올바른 프로그램인지 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 올바른 경우, PL을 입력으로 받아서 L의 의미 규칙에 따라 실행&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;CPU의 함수 모형&lt;/p&gt;
&lt;pre id=&quot;code_1663996424344&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;M[Pm](in) = out&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;M : CPU가 받아들이는 기계어&lt;/li&gt;
&lt;li&gt;Pm : 기계어로 작성된 프로그램&lt;/li&gt;
&lt;li&gt;in : 입력 데이터&lt;/li&gt;
&lt;li&gt;out : 출력 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍 언어 구현의 함수 모형&lt;/p&gt;
&lt;pre id=&quot;code_1663996557843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;L[PL](in) = out&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L : 프로그래밍 언어&lt;/li&gt;
&lt;li&gt;PL : L로 작성된 프로그램&lt;/li&gt;
&lt;li&gt;in : 입력 데이터&lt;/li&gt;
&lt;li&gt;out : 출력 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터프리터의 함수 모형&lt;/p&gt;
&lt;pre id=&quot;code_1663996640697&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IntL[PL](in) = out&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IntL : 언어 L의 명령어를 해석하는 인터프리터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일러의 함수 모형&lt;/p&gt;
&lt;pre id=&quot;code_1663996689831&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CompL[PL](in) = Pm&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CompL : 언어 L의 컴파일러&lt;/li&gt;
&lt;li&gt;Pm : CPU M이 이해하는 프로그램&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로그래밍 언어 구현 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전통적인 프로그래밍 언어 구현&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령형 언어 : 저급 언어의 연산과 명령어를 확장하는 형태&lt;/li&gt;
&lt;li&gt;절차형 언어 : 명령형 언어 + 사용자 정의 연산(함수)과 사용자 정의 명령어(프로시저)를 지원하는 형태&lt;/li&gt;
&lt;li&gt;객체지향 언어 : 절차형 언어 + 사용자 정의 자료형을 지원하는 형태&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;기계어를 확장하는 형태로 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 패러다임의 언어 구현&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상 : 함수형 언어, 논리 언어&lt;/li&gt;
&lt;li&gt;구현 모델을 추상기계로 만들어 징검다리 삼아 구현&lt;/li&gt;
&lt;li&gt;언어별 계산 모델
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수형 언어 : 람다 계산법&lt;/li&gt;
&lt;li&gt;논리 언어 : 연역 논리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;저급 언어와의 연관성을 직접 파악하기 어려움&lt;/li&gt;
&lt;li&gt;계산 모델과 하드웨어 사이에 중간기계(추상기계)를 하나 더 놓은 형태로 구현
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램을 추상기계가 알아듣는 형태로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;가상기계 : 추상기계가 구체적인 구현물로 제시되고 코드를 독자적으로 수행할 수 있는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;컴파일러 구현 단계&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ty760/btrMWeXQgJC/29Nr1VWAYgpUWu3KKWVCl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ty760/btrMWeXQgJC/29Nr1VWAYgpUWu3KKWVCl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ty760/btrMWeXQgJC/29Nr1VWAYgpUWu3KKWVCl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fty760%2FbtrMWeXQgJC%2F29Nr1VWAYgpUWu3KKWVCl0%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;301&quot; height=&quot;734&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석 단계 ( 어휘 / 구문 / 의미 분석)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램의 구조 파악&lt;/li&gt;
&lt;li&gt;중간 표현 생성 &amp;rarr; 프로그래밍 언어에 종속적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성 단계 (중간코드 생성 / 코드 생성 / 최적화 / 목적 프로그램)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목적 기계에 적합한 명령어 생성&lt;/li&gt;
&lt;li&gt;효율적인 목적 코드 생성&amp;nbsp;&amp;rarr;&amp;nbsp;목적 기계에 종속적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;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;h3 data-ke-size=&quot;size23&quot;&gt;인터프리터 구현 단계&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BG8VB/btrMUNGz8p9/6BbTJtdlqLPfU1EgPXDFx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BG8VB/btrMUNGz8p9/6BbTJtdlqLPfU1EgPXDFx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BG8VB/btrMUNGz8p9/6BbTJtdlqLPfU1EgPXDFx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBG8VB%2FbtrMUNGz8p9%2F6BbTJtdlqLPfU1EgPXDFx0%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;281&quot; height=&quot;299&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일러 구현 단계의 분석 단계를 그대로 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간 표현을 순회하며 프로그램을 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍 언어의 문장 단위로 해석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;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;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;h3 data-ke-size=&quot;size23&quot;&gt;언어 구현에 필요한 자료 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문 트리&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;언어 구현 단계의 중심을 차지&lt;/li&gt;
&lt;li&gt;분석 단계의 전 과정을 관통&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심볼 테이블(컴파일러 구현)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;식별자 정보(타입, 선언 위치 등)를 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경(인터프리터 구현)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;값 정보를 포함한 식별자 정보를 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일러 실행 환경&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행을 지원하기 위한 메모리 구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정적 세그먼트 : 코드, 정적 데이터&lt;/li&gt;
&lt;li&gt;동적 세그먼트 : 스택, 힙&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 및 실행 상태를 관리하기 위한 레지스터&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PC, SP, FP 등 전용 레지스터와 범용 레지스터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;언어 구현 실체&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;어휘 분석기 구현&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어휘(예약어, 리터럴, 연산자 등) 분석기는 프로그램의 어휘를 구별해 내고 속성을 구하여 구문 분석기에 전달&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유한 상태 기계(FSM)를 구성하여 구현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/slCp6/btrMTLv7pGL/cJdOZbiTki5FSBbOqkidvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/slCp6/btrMTLv7pGL/cJdOZbiTki5FSBbOqkidvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/slCp6/btrMTLv7pGL/cJdOZbiTki5FSBbOqkidvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FslCp6%2FbtrMTLv7pGL%2FcJdOZbiTki5FSBbOqkidvK%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;487&quot; height=&quot;260&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구문 분석기 구현&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구문 분석기는 토큰 열로부터 구문 트리를 생성&lt;/li&gt;
&lt;li&gt;구문 트리의 형태 : 파스 트리, 추상 구문 트리&lt;/li&gt;
&lt;li&gt;구문 트리를 순회하는 여러 프로시저로 구성된 프로그램&lt;/li&gt;
&lt;li&gt;순환 하강 구문 분석기 : 문법 규칙을 그대로 코드로 바꾼 형태
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;각 비단말 기호의 문법 규칙에 대해 하나의 프로시저 생성&lt;/li&gt;
&lt;li&gt;오변을 모사할 때 단말 기호는 일치 검사, 비단말 기호는 해당 프로시저 호출&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 괄호가 맞는 문자열을 생성하기 위한 분법&lt;/p&gt;
&lt;pre id=&quot;code_1663998784983&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;L&amp;gt; ::= &amp;lt;S&amp;gt; newline &amp;lt;L&amp;gt; | EOF
&amp;lt;S&amp;gt; ::= '(' &amp;lt;S&amp;gt; ')' &amp;lt;S&amp;gt; | e&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;O : (), (()), ()()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;X : ((), )()(&lt;/p&gt;</description>
      <category>방송대/프로그래밍언어론</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/69</guid>
      <comments>https://341123.tistory.com/69#entry69comment</comments>
      <pubDate>Sat, 24 Sep 2022 14:55:15 +0900</pubDate>
    </item>
    <item>
      <title>구문분석</title>
      <link>https://341123.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어휘분석&lt;/h2&gt;
&lt;pre id=&quot;code_1663991276453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int x12;
x12 = 1 + 5 * 2;
if x12&amp;gt;10 then ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자 : i, n, t, x, 1, 2, ;, =, +, 5, *, f, &amp;gt;, ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;darr; 어휘 분석(토큰, 즉 최소한의 단어단위로 묶음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어휘 : int, x12, ;, =, 1, +, 5, if, &amp;gt;, 10, then, ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;darr; 구문 분석(프로그래밍 언어의 구문 규칙을 분석)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문: &amp;lt;선언문&amp;gt; ::= &amp;lt;자료형&amp;gt; &amp;lt;변수&amp;gt;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;대입문&amp;gt; ::= &amp;lt;변수&amp;gt; = &amp;lt;수식&amp;gt; ;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;어휘분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램에서 사용된 단어를 구별해 냄&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;토큰&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어휘 분석을 통해 얻어지는 결과(연산자, 구분자, 식별자, 예약어 등)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연산자 : +-*/= 등&lt;/li&gt;
&lt;li&gt;구분자: , ; { } ( ) [ ] 등&lt;/li&gt;
&lt;li&gt;식별자 : 변수나 함수등의 이름을 나타내는 토큰 (x12, printf 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전통적인 식별자 규칙 : 문자와 숫자로 구성, 첫 글자는 문자&lt;/p&gt;
&lt;pre id=&quot;code_1663991745682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;identifier&amp;gt; ::= &amp;lt;letter&amp;gt; | &amp;lt;identifier&amp;gt;&amp;lt;letter&amp;gt; 
                          | &amp;lt;identifier&amp;gt;&amp;lt;digit&amp;gt;
&amp;lt;letter&amp;gt; ::= A | B | C ... | X | Y | Z
             a | b | c ... | x | y | z
&amp;lt;digit&amp;gt; ::= 0 | 1 | 2 | ... | 8 | 9&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예약어 : 프로그래밍 언어 자체에 정의되어 포함된 토큰(if, for, int 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식별자와 구문 구조가 같지만 식별자로 사용 못함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파스트리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;유도(derivation)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구문 규칙을 이용하여 주어진 프로그램을 만들어내는 과정&lt;/li&gt;
&lt;li&gt;유도가 가능하면 문법적 오류가 없는 유효한 프로그램이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 수식 1+5*2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문규칙&lt;/p&gt;
&lt;pre id=&quot;code_1663992077968&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;exp&amp;gt; ::= &amp;lt;exp&amp;gt;+&amp;lt;ex[&amp;gt; | &amp;lt;exp&amp;gt;-&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;*&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;/&amp;lt;exp&amp;gt; | (&amp;lt;exp&amp;gt;) | &amp;lt;digit&amp;gt;
&amp;lt;digit&amp;gt; ::= 0 | 1 | 2 | ... | 8 | 9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유도&lt;/p&gt;
&lt;pre id=&quot;code_1663992250323&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;exp&amp;gt; 
&amp;rarr; &amp;lt;exp&amp;gt; + &amp;lt;exp&amp;gt;
&amp;rarr; &amp;lt;exp&amp;gt; + &amp;lt;exp&amp;gt; * &amp;lt;exp&amp;gt;
&amp;rarr; &amp;lt;exp&amp;gt; + &amp;lt;exp&amp;gt; * &amp;lt;digit&amp;gt;
&amp;rarr; &amp;lt;exp&amp;gt; + &amp;lt;exp&amp;gt; * 2
&amp;rarr; &amp;lt;exp&amp;gt; + &amp;lt;digit&amp;gt; * 2
&amp;rarr; &amp;lt;exp&amp;gt; + 5 * 2
&amp;rarr; &amp;lt;digit&amp;gt; + 5 * 2
&amp;rarr; 1 + 5 * 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파스 트리(parse tree)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유도를 트리 형태로 나타낸 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;루트 노드 : 시작 비단말 기호&lt;/li&gt;
&lt;li&gt;비단말 노드 : 비단말 기호, 자식이 있는 노드&lt;/li&gt;
&lt;li&gt;단말 노드 : 단말 기호, 자식이 없는 노드&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단말 노드를 왼쪽부터 오른쪽으로 차례로 나열하면 주어진 프로그램이 됨.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;888&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p4maY/btrMWd5Bl55/wykjj8XUmZfEOV8FSvr6N0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p4maY/btrMWd5Bl55/wykjj8XUmZfEOV8FSvr6N0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p4maY/btrMWd5Bl55/wykjj8XUmZfEOV8FSvr6N0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp4maY%2FbtrMWd5Bl55%2Fwykjj8XUmZfEOV8FSvr6N0%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;308&quot; height=&quot;301&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;888&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단말노드 : 1 + 5 * 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파스트리가 존재하지 않으면 오류가 있는 표현임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 1 + 5 *&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/19JoJ/btrMU5fUIcz/8CUu6AKz0KEZXmbJqpSIl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/19JoJ/btrMU5fUIcz/8CUu6AKz0KEZXmbJqpSIl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/19JoJ/btrMU5fUIcz/8CUu6AKz0KEZXmbJqpSIl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F19JoJ%2FbtrMU5fUIcz%2F8CUu6AKz0KEZXmbJqpSIl1%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;297&quot; height=&quot;286&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1 + 5 * &amp;lt;digit&amp;gt;에서 &amp;lt;digit&amp;gt;은 비단말 노드인데 표현할 수 없으므로 잘못된 표현임을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모호성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 표현에 대한 파스 트리가 존재하면 구문에 부합하는 표현딤&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 주어진 표현에 대한 파스 트리가 여러 개 존재한다면?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구문론 관점 : 파스 트리가 존재하므로 구문에는 부합&lt;/li&gt;
&lt;li&gt;의미론 관점 : 주어진 표현이 서로 다른 의미로 해석될 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 1 + 5 * 2&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4mXCa/btrMU6ePGVq/D8BIkmgFfnMPvws7ibnGH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4mXCa/btrMU6ePGVq/D8BIkmgFfnMPvws7ibnGH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4mXCa/btrMU6ePGVq/D8BIkmgFfnMPvws7ibnGH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4mXCa%2FbtrMU6ePGVq%2FD8BIkmgFfnMPvws7ibnGH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;295&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 파스트리는 1+(5*2) , 오른쪽 트리는 (1+5)*2 로 계산 된다.&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;h3 data-ke-size=&quot;size23&quot;&gt;모호한 문법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 표현에 대해 서로 다른 파스 트리가 만들어지는 문법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 프로그램이 서로 다른 결과를 도출할 수 있음&lt;/li&gt;
&lt;li&gt;프로그래머의 의도와는 다르게 해석되어 잘못된 결과를 도출할 수 있는 위험을 내포&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문법의 명확화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;의도하지 않은 의미로 해석되지 않도록 모호한 문법을 명확하게 변경&lt;/li&gt;
&lt;li&gt;새로운 비단말 기호와 새로운 구문 규칙을 추가하여 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;연산자 우선순위&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+, - : 가장 낮음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*, / : 중간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(, ) : 가장 높음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모호한 문법&lt;/p&gt;
&lt;pre id=&quot;code_1663993548771&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;exp&amp;gt; ::= &amp;lt;exp&amp;gt;+&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;-&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;*&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;/&amp;lt;exp&amp;gt; | (&amp;lt;exp&amp;gt;) | &amp;lt;digit&amp;gt;
&amp;lt;digit&amp;gt; ::= 0 | 1 | 2 | ... | 8 | 9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정&lt;/p&gt;
&lt;pre id=&quot;code_1663994195747&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;exp&amp;gt; ::= &amp;lt;exp&amp;gt;+&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;-&amp;lt;exp&amp;gt; | &amp;lt;term&amp;gt;
&amp;lt;term&amp;gt; ::= &amp;lt;term&amp;gt;*&amp;lt;term&amp;gt; | &amp;lt;term&amp;gt;/&amp;lt;term&amp;gt; | &amp;lt;factor&amp;gt;
&amp;lt;factor&amp;gt; ::= (exp) | &amp;lt;digit&amp;gt;
&amp;lt;digit&amp;gt; ::= 0 | 1 | 2 | ... | 8 | 9&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwYwTe/btrMU5fVi7l/cRx7Vgzk7IPjkKONvtoK01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwYwTe/btrMU5fVi7l/cRx7Vgzk7IPjkKONvtoK01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwYwTe/btrMU5fVi7l/cRx7Vgzk7IPjkKONvtoK01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwYwTe%2FbtrMU5fVi7l%2FcRx7Vgzk7IPjkKONvtoK01%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;333&quot; height=&quot;449&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계산은 트리 아래쪽에서부터 하기 때문에 * 먼저 계산된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;좌결합 연산자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선순위가 동일한 연산자 사이의 계산 순서는 왼쪽이 우선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 5-3+2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모호한 문법&lt;/p&gt;
&lt;pre id=&quot;code_1663994095912&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;exp&amp;gt; ::= &amp;lt;exp&amp;gt;+&amp;lt;exp&amp;gt; | &amp;lt;exp&amp;gt;-&amp;lt;exp&amp;gt; | &amp;lt;term&amp;gt;
&amp;lt;term&amp;gt; ::= &amp;lt;term&amp;gt;*&amp;lt;term&amp;gt; | &amp;lt;term&amp;gt;/&amp;lt;term&amp;gt; | &amp;lt;factor&amp;gt;
&amp;lt;factor&amp;gt; ::= (exp) | &amp;lt;digit&amp;gt;
&amp;lt;digit&amp;gt; ::= 0 | 1 | 2 | ... | 8 | 9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정&lt;/p&gt;
&lt;pre id=&quot;code_1663994155560&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;exp&amp;gt; ::= &amp;lt;exp&amp;gt;+&amp;lt;term&amp;gt; | &amp;lt;exp&amp;gt;-&amp;lt;term&amp;gt; | &amp;lt;term&amp;gt;
&amp;lt;term&amp;gt; ::= &amp;lt;term&amp;gt;*&amp;lt;factor&amp;gt; | &amp;lt;term&amp;gt;/&amp;lt;factor&amp;gt; | &amp;lt;factor&amp;gt;
&amp;lt;factor&amp;gt; ::= (exp) | &amp;lt;digit&amp;gt;
&amp;lt;digit&amp;gt; ::= 0 | 1 | 2 | ... | 8 | 9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;exp&amp;gt;+&amp;lt;term&amp;gt;이 된 경우 &amp;lt;term&amp;gt;에서 덧셈은 더이상 밑으로 나아갈 수 없기 때문에 왼쪽 우선순위가 지켜진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhxR57/btrMVtHBfr2/jL0P5tt9dPxGKKA2y97xbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhxR57/btrMVtHBfr2/jL0P5tt9dPxGKKA2y97xbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhxR57/btrMVtHBfr2/jL0P5tt9dPxGKKA2y97xbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhxR57%2FbtrMVtHBfr2%2FjL0P5tt9dPxGKKA2y97xbK%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;258&quot; height=&quot;354&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;exp&amp;gt;-&amp;lt;term&amp;gt;을 먼저 표현하면 +를 표현할 수 없기 때문에 좌결함 순서가 지켜진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중첩된 if문의 else&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중첩된 if문에서 else문의 개수가 if문의 개수보다 적은 경우 각 else문을 어느 조건이 거짓일 때 수행해야 하는지 모호&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;ex) if x&amp;gt;1 then if x&amp;lt;5 then y=1 else y=2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모호한 문법&lt;/p&gt;
&lt;pre id=&quot;code_1663994691814&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;if문&amp;gt; ::= if &amp;lt;논리식&amp;gt; then &amp;lt;문장&amp;gt; else &amp;lt;문장&amp;gt; | if &amp;lt;논리식&amp;gt; then &amp;lt;문장&amp;gt; 
&amp;lt;문장&amp;gt; ::= &amp;lt;if문&amp;gt; | &amp;lt;대입문&amp;gt; ...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chFhDU/btrMT4Cf4W0/jhBOmV8hYcrza0bluoL2tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chFhDU/btrMT4Cf4W0/jhBOmV8hYcrza0bluoL2tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chFhDU/btrMT4Cf4W0/jhBOmV8hYcrza0bluoL2tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchFhDU%2FbtrMT4Cf4W0%2FjhBOmV8hYcrza0bluoL2tk%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;682&quot; height=&quot;256&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지 해석이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 : if x&amp;gt;1 then (if x&amp;lt;5 then y=1) else y=2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 : if x&amp;gt;1 then (if x&amp;lt;5 then y=1 else y=2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* else 문 앞에 나온 if문들 중 다른 else문과 짝이 되지 않은 가장 가까운 if문과 짝이 되도록 함.&lt;/p&gt;
&lt;pre id=&quot;code_1663995191276&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;if문&amp;gt; ::= if &amp;lt;논리식&amp;gt; then &amp;lt;문장2&amp;gt; else &amp;lt;문장&amp;gt; | if &amp;lt;논리식&amp;gt; then &amp;lt;문장&amp;gt;
&amp;lt;if문2&amp;gt; ::= if &amp;lt;논리식&amp;gt; then &amp;lt;문장2&amp;gt; else &amp;lt;문장2&amp;gt;
&amp;lt;문장&amp;gt; ::= &amp;lt;if문&amp;gt; | &amp;lt;대입문&amp;gt; ...
&amp;lt;문장2&amp;gt; ::= &amp;lt;if문2&amp;gt; | &amp;lt;대입문&amp;gt; ...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CP9fP/btrMTEjycf6/KSQrZZUpB9gwaaJUMWWxKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CP9fP/btrMTEjycf6/KSQrZZUpB9gwaaJUMWWxKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CP9fP/btrMTEjycf6/KSQrZZUpB9gwaaJUMWWxKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCP9fP%2FbtrMTEjycf6%2FKSQrZZUpB9gwaaJUMWWxKK%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;561&quot; height=&quot;339&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문2에는 if-then 구문이 없기 때문에 완성시킬 수 없다.&lt;/p&gt;</description>
      <category>방송대/프로그래밍언어론</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/68</guid>
      <comments>https://341123.tistory.com/68#entry68comment</comments>
      <pubDate>Sat, 24 Sep 2022 13:58:40 +0900</pubDate>
    </item>
    <item>
      <title>제어장치</title>
      <link>https://341123.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제어장치의 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의 : 컴퓨터시스템의 모든 장치들을 유기적으로 제어하는 장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 : 기억장치에 저장된 프로그램으로부터 명령어를 순차적으로 하나씩 읽어내어 연산코드 부분을 해독한 후, 그 결과에 따라 컴퓨터 시스템의 각 요소를 동작시키는 제어신호를 발생시켜 명령어를 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하나의 명령어는 한 클럭 동안에 수행되는 마이크로 연산의 집합으로 구성.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 명령어의 실행은 이러한 마이크로 연산의 연속적인 반복으로 이루어짐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 제어장치는 요구되는 마이크로연산을 연속적으로 수행하게 하는 신호를 보내어 명령어를 수행하게 하는 역할이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 제어장치와 처리장치와의 관계&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo83z5/btrMCGV1EvD/vkUOYGmWaisgeanT7Yj4f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo83z5/btrMCGV1EvD/vkUOYGmWaisgeanT7Yj4f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo83z5/btrMCGV1EvD/vkUOYGmWaisgeanT7Yj4f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo83z5%2FbtrMCGV1EvD%2FvkUOYGmWaisgeanT7Yj4f1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;565&quot; height=&quot;281&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제어장치의 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성요소 : 명령어 레지스터, 명령어 해독기, 순서 제어기, 주소 처리기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBfCem/btrMA5PifZw/JsipXlAYfEqLFN8eSEtJk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBfCem/btrMA5PifZw/JsipXlAYfEqLFN8eSEtJk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBfCem/btrMA5PifZw/JsipXlAYfEqLFN8eSEtJk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBfCem%2FbtrMA5PifZw%2FJsipXlAYfEqLFN8eSEtJk0%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;452&quot; height=&quot;266&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 수행과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 프로그램카운터에 저장된 주소로 기억장치에 접근한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기억장치에서 명령어를 읽어와 명령어 레지스터(IR)에 저장하고, 프로그램 카운터를 1 증가시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 읽어온 명령어에서 연산코드는 명령어 해독기로, 오퍼랜드는 주소처리기로 보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 주소처리기는 명령어 수행에 필요한 오퍼랜드의 주소 또는 다음 명령어의 주소를 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 제어신호 발생기에서 연산코드를 해독하여 명령어 수행을 위한 제어신호를 발생한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제어장치의 구현방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치의 유형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로프로그램에 의한 제어장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제어단어와 같은 제어정보를 특별한 게억장치에 기억시킨 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램에 의한 제어방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 장점 ㅣ 제어신호를 수정하고자 할때 융통성이 뛰어남&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단점 : 기억장치에서 명령을 인출하는 별도의 시간 때문에 속도가 느림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고밀도 집적회로(VLSI)가 가능하여 대부분의 컴퓨터에서 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어에 의한 제어장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서회로와 같은 게이트와 플립플롭으로 이루어짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 장점: 순서회로도 구성되기 때문에 고속 동작이 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단점 : 회로의 동작방법이 바뀌면 다시 설계해야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특수 컴퓨터에서 사용&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마이크로프로그램에 의한 제어장치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어방식 : 제어변수 값들을 여러 개의 단어로 결합하여 표현하고, 그것을 연속적으로 읽어서 제어논리회로에 공급하여 동작시키는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치의 역할&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일련의 마이크로 연산을 순차적으로 수행하도록 제어.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이러한 제어를 위해 제어변수로서 제어단어를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어단어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0과 1의 스트링으로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 제어단어에는 마이크로명령어가 포함 : 마이크로명령어는 하나 혹은 다수의 마이크로 연산을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제어단어를 이용하여 처리장치의 여러 구성요소들이 특정 시점에서 연산을 시작하도록 프로그램이 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AvGn9/btrMCGBH1SX/Cc9qBMeAgjfJAcQ1Svrjc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AvGn9/btrMCGBH1SX/Cc9qBMeAgjfJAcQ1Svrjc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AvGn9/btrMCGBH1SX/Cc9qBMeAgjfJAcQ1Svrjc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAvGn9%2FbtrMCGBH1SX%2FCc9qBMeAgjfJAcQ1Svrjc1%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;689&quot; height=&quot;202&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTAvky/btrMDfwYy2f/dVZhET2jhX2U8iyokmTIt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTAvky/btrMDfwYy2f/dVZhET2jhX2U8iyokmTIt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTAvky/btrMDfwYy2f/dVZhET2jhX2U8iyokmTIt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTAvky%2FbtrMDfwYy2f%2FdVZhET2jhX2U8iyokmTIt0%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;631&quot; height=&quot;381&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어기억장치 : 모든 제어정보를 항상 저장하고 있는 기억장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저장된 마이크로 명령어는 하나 또는 다수의 마이크로 연산을 나타내는 제어단어르르 포함하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마이크로 명령어가 모두 수행되고 나면, 다음에 수행될 마이크로 명령어의 주소를 결정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다음 마이크로 명령어의 주소를 결정하기 위해서는 주소 정보가 현재의 마이크로 명령어 내에 한 비트 혹은 여러 비트로 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어주소레지스터 : 제어기억장치에 있는 마이크로 명령어의 주소를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음주소생성기 : 다음에 수행될 마이크로명령어의 주소를 만들어 낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다음 마이크로 명령어의 주소는 순서기의 입력에 따라 다양한 방법으로 결정될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. CAR의 1증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 제어기억장치의 주소를 CAR로 적재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 외부로부터 온 주소를 CAR에 적재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 제어동작을 시작하는 초기주소 적재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어데이터 레지스터 : 제어기억장치에서 읽어온 현재 마이크로 명령어를 저장하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHM1xM/btrMEtAZOJc/OyxlUCGiiTweEByjockDmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHM1xM/btrMEtAZOJc/OyxlUCGiiTweEByjockDmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHM1xM/btrMEtAZOJc/OyxlUCGiiTweEByjockDmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHM1xM%2FbtrMEtAZOJc%2FOyxlUCGiiTweEByjockDmK%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;598&quot; height=&quot;375&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 제어주소레지스터에 새로운 주소가 들어오면, 이 주소에 있는 26비트의 마이크로 명령어를 제어기억장치로부터 인출.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 마이크로 명령어의 제어단어는 제어주소레지스터의 다음 동작을 결졍&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 처리장치에서 해당하는 상태비트를 새로운 값으로 갱신하며, 다음 주소를 제어주소레지스터로 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 제어주소레지스터의 새로운 주소는 제어기억장치의 다음 마이크로 명령어를 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 이러한 과정을 각 클럭의 천이 때마다 반복.&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;h2 data-ke-size=&quot;size26&quot;&gt;마이크로명령어 형식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로명령어 : 마이크로프로그램에 의한 제어방식에서 제어기억장치에 있는 제어단어의 내역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로명령어의 구성내역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 26비트의 예&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16비트 : 처리장치의 레지스터를 선택하는 제어단어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10비트 : 제어장치에서 사용하는 필드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마이크로프로그램의 개념&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마이크로프로그램의 작성&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마이크로 프로그램이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어기억장치에 저장된 일련의 마이크로명령어들의 집합(마이크로프로그램 루틴)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 마이크로 프로그램을 이용하여 제어장치를 구현(마이크로 프로그램에 의한 제어장치)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 동작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 레지스터 R1의 내용에서 R2의 내용을 빼서 그 결과를 R3에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 또한 R1과 R2의 내용 중에서 작은 수를 R4에 더하고, 만약 R1과 R2의 내용이 같으면 R4를 1증가시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. R4의 내용을 처리장치의 출력단자로 보낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서적인 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. R3 &amp;lt;- R1-R2 (이때 C와 Z에 새로운 값이 들어간다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. a. R1&amp;lt;R2 이면 (C=0), R4 &amp;lt;- R4+R1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; b. R1&amp;gt;R2이면(C=1, Z=0), R4&amp;lt;-R4+R2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; c. R1=R2 이면(Z=1), R4&amp;lt;-R4+1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Output &amp;lt;- R4, 외부주소로 분기한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레지스터 전송문(20번지에서 시작하여 외부번지로 분기한다고 가정)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 60%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;주소&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;마이크로 연산과 분기조건&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;20&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;R3&amp;lt;-R1-R2, CAR&amp;lt;-CAR+1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;21&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;if(C=1) then (CAR&amp;lt;-23) else (CAR&amp;lt;-CAR+1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;22&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;R4&amp;lt;-R4+R1, CAR&amp;lt;-26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;23&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;if(Z=0) then (CAR&amp;lt;-25) else(CAR&amp;lt;-CAR+1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;24&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;R4&amp;lt;-R4+1, CAR&amp;lt;-26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;25&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;R4&amp;lt;-R4+R2, CAR&amp;lt;-CAR+1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.09302%; text-align: center;&quot;&gt;26&lt;/td&gt;
&lt;td style=&quot;width: 48.4501%; text-align: center;&quot;&gt;출력&amp;lt;-R4, CAR&amp;lt;-외부주소&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기호마이크로프로그램&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 83.4884%; height: 271px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;주소&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;A&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;B&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;D&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;F&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;H&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;MUX1&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;MUX2&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;다음주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;20&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R1&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R2&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R3&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;SUB&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NEXT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;21&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NONE&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;TSF&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;INT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;LC&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;22&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R1&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;ADD&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;INT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;LAD&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;23&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NONE&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;TSF&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;INT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;LNZ&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;24&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;INC&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;INT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;LAD&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;25&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R2&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;ADD&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NEXT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;26&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;R4&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NONE&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;TSF&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;NSH&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;EXT&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;LAD&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2진 마이크로프로그램&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 83.4884%; height: 271px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;주소&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;A&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;B&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;D&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;F&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;H&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;MUX1&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;MUX2&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;다음주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0101&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010101&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010111&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010110&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0010&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010011&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;101&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;010&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0010&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;011010&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;0000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;001&lt;/td&gt;
&lt;td style=&quot;width: 11.1111%; text-align: center;&quot;&gt;000000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마이크로프로그램의 개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제어장치 설계를 위한 시스템적인 접근과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마이크로명령어 형식을 설정하면 마이크로프로그램의 작성과정은 컴퓨터의 프로그램 작성과정과 유사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이러한 이유로 펌웨어라고도 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;하드웨어에 의한 제어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어에 의한 제어장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주어진 시간에 처리장치에서 수행할 마이크로연산을 결정해주는 제어상태를 갖는 순서회로&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CEtS6/btrMEtutMjb/QLpic7wDIw9RBG1q4Y0pK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CEtS6/btrMEtutMjb/QLpic7wDIw9RBG1q4Y0pK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CEtS6/btrMEtutMjb/QLpic7wDIw9RBG1q4Y0pK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCEtS6%2FbtrMEtutMjb%2FQLpic7wDIw9RBG1q4Y0pK1%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;477&quot; height=&quot;268&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치의 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력신호들에 따라 출력신호들을 발생하도록 내부논리 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 제어신호에 대한 부울 표현식이 입력함수로 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 제어장치의 설계는 순서회로의 설계이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 제어순서의 상태도를 이용하여 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상태 플립플롭을 이용한 제어방식&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zfInC/btrMGAmeiQw/23DnWmI4CxQ9KawmtqXkNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zfInC/btrMGAmeiQw/23DnWmI4CxQ9KawmtqXkNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zfInC/btrMGAmeiQw/23DnWmI4CxQ9KawmtqXkNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzfInC%2FbtrMGAmeiQw%2F23DnWmI4CxQ9KawmtqXkNk%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;258&quot; height=&quot;198&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정논리가 제어장치가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 입력에 의한 결정논리에서 출력 C0, C1, C2의 상태가 결정되며, 이들은 순서적으로 한개 상태씩 동작된다.&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;2. 순차 레지스터와 디코더를 이용한 제어방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레지스터 : 제어상태의 순서를 정하는데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코더 : 각 상태마다 하나의 출력만을 나오도록 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n-비트 순서 레지스터 : n개의 플립플롭과 게이트로 구성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0kfEF/btrMEsPTDH1/OEy1Yzi3ycgqn1sWQYXtKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0kfEF/btrMEsPTDH1/OEy1Yzi3ycgqn1sWQYXtKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0kfEF/btrMEsPTDH1/OEy1Yzi3ycgqn1sWQYXtKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0kfEF%2FbtrMEsPTDH1%2FOEy1Yzi3ycgqn1sWQYXtKk%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;501&quot; height=&quot;123&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2비트로 된 레지스터와 2x4 디코더를 이용한 네 가지 상태의 순서제어논리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 순서레지스터는 2개의 플립플롭을 가지며, 레지스터의 다음 상태는 현재 상태와 외부입력에 의해 결정되고, 제어 출력신호는 디코더의 출력이 된다.&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;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;</description>
      <category>방송대/컴퓨터구조</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/67</guid>
      <comments>https://341123.tistory.com/67#entry67comment</comments>
      <pubDate>Tue, 20 Sep 2022 22:05:39 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 부팅과 종료</title>
      <link>https://341123.tistory.com/66</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;운영체제의 부팅&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nGQKD/btrL9JLyutw/oX4MRMlKFJM1pXr7iVl20k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nGQKD/btrL9JLyutw/oX4MRMlKFJM1pXr7iVl20k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nGQKD/btrL9JLyutw/oX4MRMlKFJM1pXr7iVl20k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnGQKD%2FbtrL9JLyutw%2FoX4MRMlKFJM1pXr7iVl20k%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;311&quot; height=&quot;284&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. ROM으로부터 BIOS 펌웨어 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 하드웨어 검사 후, 부트 로더를 메모리에 적재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. MBR에 있는 부트로더 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 부팅가능한 파티션 찾음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 리눅스 부트로더인 GRUB를 찾아 메모리에적재함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. GRUB는 그래픽 인터페이스와 멀티부팅을 지원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 커널 이미지 로드 (/boot/vmlinuz-&amp;lt;kernel-version&amp;gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. initramfs 로드(부팅 과정에 필요한 임시 파일 시스템)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 커널 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 하드웨어 점검하고 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 루트(/) 파일 시스템을 마운트하고 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. /sbin/init 프로그램을 실행시키고 제어를 넘김&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;초기화 데몬&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전통적 init 데몬&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;runlevel에 기초하여 순차적으로 서비스를 실행하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 오래걸리며, 복잡한 초기화 스크립트로 인해 새로운 하드웨어나 서비스 등장에 효율적 대처가 어렵다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;업스타트 init 데몬과 systemd 데몬&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 기반으로 서비스를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 설정파일들로 구성&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;init 프로세스&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 사용자 프로세스의 최상위 조상 프로세스(PID 1)&lt;/li&gt;
&lt;li&gt;ps ax 명령으로 확인 가능&lt;/li&gt;
&lt;li&gt;시스템 초기화 작업을 실행한다.&lt;/li&gt;
&lt;li&gt;시스템 운영을 관리하고 셧다운을 처리함.&lt;/li&gt;
&lt;li&gt;/etc/init/ 디렉터리에 있는 job 설정 파일을 읽음&lt;/li&gt;
&lt;li&gt;initctl 명령 : job의 상태를 확인하거나 수동으로 시작/중지시키는 명령&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;환경 설정 파일과 스크립트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/init/rcS.conf : 부팅시 한번 실행. 초기 런레벨을 읽고 /etc/rc.d/rc.sysinit 스크립트 실행&lt;/li&gt;
&lt;li&gt;/etc/init/rc.conf : 부팅되거나 런레벨이 바뀔 때 필요한 서비스를 관리하기 위한 /etc/rc.d/rc.runlevel 스크립트를 실행&lt;/li&gt;
&lt;li&gt;/etc/inittab : 부팅 시 정해지는 초기 런레벨이 정의된 파일&lt;/li&gt;
&lt;li&gt;/etc/rc.d/rc.local : 런레벨 2, 3, 5에서 가장 마지막에 실행되는 스크립트.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;런레벨&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/inittab 파일에 id:5:initdefalut: 와 같이 설정되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런레벨이 5라면 /etc/rc.d/rc&lt;span style=&quot;color: #ee2323;&quot;&gt;5&lt;/span&gt;.d/ 디렉터리에 존재하는 스크립트가 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런레벨 2, 3, 5에서 가장 마지막에 실행되는 스크립트는 /etc/rc.d/rc.local이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;런레벨&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;시스템이 종료될 때 사용되는 레벨로 기본값으로 설정해서는 안 됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;단일 사용자 모드로, 로그인 과정없이 root 사용자로 로그인되며 콘솔에서 시스템 점검이나 복구를 위한 관리자모드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;기본적으로 네트워크 서비스를 제공하지 않는 다중 사용자 모드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;모든 네트워킹을 지원하는 다중 사용자 모드.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;사용되지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;그래픽 사용자 환경을 제공하는 다중 사용자 모드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%; text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 88.9535%;&quot;&gt;시스템을 재부팅할 때 사용되는 레벨로 기본값으로 설정해서는 안 됨.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;telinit 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런레벨을 변경하는 관리자 명령&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;runlevel 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 런레벨과 현재 런레벨을 확인하는 명령&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;chkconfig 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 런레벨에 따른 시스템 서비스의 활성화 여부를 확인하거나 변경하는 명령&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;service 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 운영 중에 /etc/rc.d/init.d/ 디렉터리에 존재하는 초기화 스크립트를 수동으로 실행 또는 중지시키는 명령&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시스템 종료&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;shutdown 명령&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간을 정해 시스템을 안전하게 종료하는 명령&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shutdown [options] time [message]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-r : 재부팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-c : 셧다운 취소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;종료 절차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;init 프로세스를 통해 런레벨 변경(0 또는 6)&lt;/li&gt;
&lt;li&gt;모든 프로세스에게 종료를 알림&lt;/li&gt;
&lt;li&gt;각 프로세스가 스스로 종료하도록 TERM 시그널을 보냄&lt;/li&gt;
&lt;li&gt;종료하지 않은 프로세스에게 강제 종료를 위한 KILL 시그널을 보냄&lt;/li&gt;
&lt;li&gt;시스템 파일을 잠그고 파일 시스템을 언마운트함&lt;/li&gt;
&lt;li&gt;버퍼에 있는 데이터 파일 시스템에 기록함&lt;/li&gt;
&lt;li&gt;시스템 호출을 통해 커널에 재부팅 또는 종료를 요청&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>방송대/UNIX시스템</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/66</guid>
      <comments>https://341123.tistory.com/66#entry66comment</comments>
      <pubDate>Thu, 15 Sep 2022 09:00:50 +0900</pubDate>
    </item>
    <item>
      <title>큐</title>
      <link>https://341123.tistory.com/64</link>
      <description>&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;h2 data-ke-size=&quot;size26&quot;&gt;큐의 개념&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;의미&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 들어간 작업이 가장 먼저 처리되는 작업 스케쥴 FIFO&lt;/li&gt;
&lt;li&gt;한 쪽에서는 삽입연산만 가능하고, 다른 쪽에서는 삭제연산만 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;큐의 응용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU이 관리 방법, FCFS(Fist-Come First Served)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케줄링 기법은 작업이 준비 큐에 도착한 순서대로 CPU를 할당받도록 해 주는 기법&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;RR(Round Robin)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처리 못한 작업은 다시 큐에 등록되는 기법&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;원형 큐&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 문제점을 해결하기 위해 원형큐가 제안됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원형 큐는 파이프의 입구와 출구 부분을 연결시킨 형태.&lt;/p&gt;</description>
      <category>방송대/자료구조</category>
      <author>피클s</author>
      <guid isPermaLink="true">https://341123.tistory.com/64</guid>
      <comments>https://341123.tistory.com/64#entry64comment</comments>
      <pubDate>Tue, 13 Sep 2022 09:33:12 +0900</pubDate>
    </item>
  </channel>
</rss>