블로그

감자

나는 AI에 대체될까?

AI 시대에는 분야를 막론하고 "AI가 내 자리를 대체하지 않을까?"라는 걱정을 피하기 어렵습니다.특히 개발자들은 코드 자동 생성 서비스가 폭발적으로 등장하면서 "이제 코딩 공부는 필요 없겠다"라고 생각할 수 있습니다.과연 이것이 사실일까요?우리는 정말 코딩 공부를 하지 않아도 될까요?이 질문에 답하기 전에 2025년 3월의 한 기사를 살펴보겠습니다. 빌게이츠가 예측한 AI 시대 유망한 직업 ‘세 가지’… "의사·교사는 AI에 대체될 것”다만 게이츠는 전 직종에서 AI가 인간을 대체할 것이라면서도 일부 직종의 경우 대체되지 않는 직업도 있을 것이라고 했다. 그는 "기계가 야구를 하는 것을 누구도 보고 싶지 않을 것"이라고 했다.그러면서 AI가 대체하기 힘든 직업으로 '코딩 개발자, 에너지 전문가, 생물학자' 등을 언급했다. 최신 AI 모델들이 등장할 때마다 개발자들이 가장 먼저 대체될 것이라는 주장이 나오고 있지만, 게이츠는 인간 전문가가 필수적이라고 보고 있다.게이츠는 AI가 코드를 생성할 수 있다는 것은 분명하지만, 이 과정에서 여전히 인간이 필요하다고 했다.인간 전문가는 오류를 식별하고 수정하며, 알고리즘을 개선하고 AI 개발을 강화하는 데 반드시 필요하다는 설명이다. 이어 게이츠는 생물학자도 AI가 대체하기 어려울 것이라고 주장했다. 빌게이츠가 언급한 AI 시대에도 대체되기 어려운 직업으로는 코딩 개발자, 에너지 전문가, 생물학자가 있습니다. 이 중에서 코딩 개발자에 초점을 맞춰 살펴보겠습니다.AI가 코드를 빠르게 생성할 수 있게 되면서 개발자의 생산성은 크게 향상되었습니다. 하지만 동시에 컴퓨터 과학에 대한 깊은 지식이 필요 없는 단순 코드 생성 작업은 AI가 신입 개발자의 역할을 대체하고 있습니다. 이러한 기술적 변화와 경제적 요인으로 신입 개발자 채용이 감소하고 있습니다.그렇다면 주니어 개발자들은 개발직을 포기하고 다른 진로를 모색해야 할까요? 앞서 본 기사에 따르면, 개발자가 여전히 필요한 이유는 AI가 생성한 잘못된 코드와 비효율적인 알고리즘을 수정해야 하기 때문입니다. 즉, AI가 만든 코드의 품질을 판단하고 개선할 수 있는 능력이 필수적이라는 뜻입니다.경험이 부족한 주니어 개발자들은 이러한 능력이 아직 미흡할 수 있습니다. 하지만 AI 시대에 살아남기 위해서는 반드시 이러한 역량을 키워야 합니다.  컴퓨터 공학(Computer Science)에 대한 지식은 이러한 능력을 키우는 데 필수적입니다.이는 주니어 개발자는 물론 시니어 개발자에게도 해당됩니다.컴퓨터 공학은 컴퓨터 구조, 운영체제, 자료구조와 알고리즘, 네트워크, 데이터베이스 등을 포함합니다.이번 포스트에서는 그 중 컴퓨터 구조에 초점을 맞추어 보겠습니다.컴퓨터는 0과 1을 스위칭 하는 장치로 만들어집니다.과거에는 릴레이라는 장치를 이용해 만들었고, 이보다 효율적인 진공관, 트랜지스터로 발전되어 왔습니다.현재 컴퓨터는 트랜지스터를 이용해 만들 수 있는데요.트랜지스터로 논리 회로를 구성하고, 논리 회로를 조합해 프로그래밍을 할 수 있는 컴퓨터를 만듭니다.이 과정에서 논리 연산과 논리 연산의 특성, 메모리의 구조와 특성, 기계어와 어셈블리어를 다루면서 메모리에 대한 추상적인 이해가 아니라 실제적인 이해를 할 수 있습니다.이를 이해한다면 C언어의 메모리 접근은 굉장히 쉽게 느껴질 수 있습니다.그리고 컴퓨터가 ‘진짜로 어떻게 동작하는지’를 이해할 수 있기 때문에 상위 계층에서 해결하기 어려운 최적화 작업도 할 수 있는 능력을 가지게 됩니다.단순히 코드를 빠르게 만들어 내는 것은 AI가 가장 잘하는 것입니다.AI가 주도하는 시대에 우리는 컴퓨터 공학에 대한 기초를 단단히 가지고 AI의 부족한 부분을 채워 확실한 경쟁력을 가졌으면 좋겠습니다.그렇지 않으면 대체될 것입니다. 컴퓨터 구조는 대학교 수업, 인터넷 강의, 서적 등 다양한 방법으로 배울 수 있습니다.제가 준비한 컴퓨터 구조 강의는 시각적 자료를 활용하여 개념을 쉽게 설명하고, 실제 8비트 컴퓨터를 직접 만들어보며 컴퓨터의 구조와 동작 원리를 깊이 이해할 수 있도록 구성했습니다. 컴퓨터 구조를 배우는 것은 단순히 AI 시대의 흐름을 쫓아가는 것이 아닌, 그 흐름을 주도할 수 있는 힘을 키우는 일입니다. 이 강의를 통해 여러분이 기술의 최전선에서 활약하며 세상의 변화를 이끌어낼 수 있도록 돕겠습니다.(2025년 5월 10일까지 30%할인 진행하고 있습니다)add_shortcode('course','336749','list')

컴퓨터 구조컴퓨터과학컴퓨터구조AI

빠타박스

[(Daily 빠타박스)인프런 워밍업 클럽 2기] - CS 전공지식을 시작하는 글_1일차

인프런 워밍업 클럽 CS얼마전 본 면접에 나는 그냥 딱히 신경 쓰지 않았다. 나의 실력이 이정도구나..이런 질문에 이런 것 밖에 답변을 하지 못하는구나. 너무 준비되지 못했고 기초가 부족하다 느꼈다... 그러다 우연치 않게 보게된 워밍업 클럽 처음엔 무료인줄 알았다..그러나 스터디 그룹에 초대되고 그런 과정이 무료라는 것이지 절대 세상에 무료라는 것은 없다. 그냥 40% 할인권을 주었고그것으로 구매하여 저렴하게 강의를 수강할 수 있었다. 감자라는 강의자 분은 정말 퀄리티 좋은 강의를 올리시고 계신다는 것을 일단 동영상에 노력이 어마어마 하게 들어갔음을 알 수 있었다. 감자강의자님 로드맵 CS일단 강의 자체는 좋아보였고, 리뷰도 정말 좋게 쓰여져 있다. 솔직히 믿을만 한가. 싶기도 했지만. 나는 좀 인강 스타일이 까다롭게 잘 안맞아서... 이 30대에 듣는 인강을 신중히 고르는 편이였다. 리뷰 내용도 일단 보고 고민을 많이했다. 널널한개발자 님의 강의를 볼지 이것을 할 지 그러나 그냥 해보자 싶었다.강의 커리큘럼을 비교해 보면서 들어오게 되었고,11월 1일 까지 마감이라. 딱 마침 내가 다시 학원에 가게 될 시기랑 겹치지 않아서.(갈지 안갈지 지금 쓰는 시점에서 아직 정하지는 않았다만..) 그렇게 초대된 디스코드를 통해서 OT도 진행하였고, 확실히 제대로 진행하는 스터디 클럽인 만큼 신중히 잘 하는 것 같았다.시간표도 주어지고 준비가 되어있는 듯 했다. 약 한달간의 커리큘럼과정이였으나.이것이 어쨋든 자기주도학습의 일환이다. 우리가 들어야 한다. 정보를 제공해주었으니. 그래서 시작해본다.내 스스로의 위치에서 발전할 수 있기를 어디서나 중요한건 복습이다. 복습되지 않으면 쉽지 않을 수 있다.내가 간과하는 것이 그런것이다. 반복학습을 싫어하기에. 힘들어한다.하지만 해야하만 한다... 한번 진행해보자... 9월 30일을 기점으로 1일차가 시작되고 그것을 해내기 위해 글을 써본다.또한 정보처리기사 실기가 잡혀있는데. 병행해서 해야만한다.

컴퓨터 구조인프런워밍업클럽스터디모임감자빠타박스언리얼엔진CS지식CS게임개발자

강동훈

[인프런 워밍업 클럽 4기 - CS] - 2주차 발자국

📕 자료구조와 알고리즘(심화)✅ Red-Black 트리AVL 트리는 균형을 엄격히 지키기 때문에 삽입, 제거는 느리지만 검색이 빠름Red-Black 트리는 균형에 대해 관대하여 삽입, 제거는 빠르지만 검색이 느림삽입 규칙1. 모든 노드는 빨간색이나 검은색 두 가지 색 중 하나이다2. 루트 노드는 항상 검은색이다3. 모든 터미널 노드(NIL)는 검정색이다4. 연속해서 빨간색 노드가 올 수 없다.1. 현재 노드가 빨간색이라면 부모, 자식은 빨간색일 수 없음5. 검은색은 연속으로 올 수 있다6. 루트 노드에서 터미널 노드인 NIL노드까지 모든 경로에는 같은 수의 검은색 노드가 있어야 한다. 높이1. 트리의 높이2. Black Height: 루트부터 NIL 노드까지 Black 노드의 수 삽입을 할 때 회전도 하지만 노드의 색도 다시 칠해준다. (recoloring)새로운 노드를 삷입할 때 무조건 빨간 색 노드를 칠한다.이 후 균형을 잡아주는 함수를 호출(rebalanceAfterInsertion 함수) 1. 새로운 노드가 루트노드인 경우1. 검정색으로 변경2. 부모노드와 삼촌노드가 빨간색인 경우1. 삼촌노드: 부모의 형제 노드2. 할아버지를 빨간색으로, 부모/삼촌 노드를 검정색으로 변경3. 규칙을 위반하지 않을 때까지 재귀적으로 상위로 올라감3. 부모는 빨간색, 삼촌은 검정색, 새로운 노드는 안쪽 손자인 경우1. 안쪽 손자: 할아버지, 부모, 자신이 삼각형을 이루는 노드 (RL)2. 부모 노드를 회전, 할아버지 노드는 반대 회전3. 새로 삽입된 노드는 검은색, 할아버지 노드는 빨간색으로 변경4. 부모 빨간색, 삼촌 검정색, 새로운 노드가 바깥쪽 손자인 경우1. 바깥쪽 손자: 할아버지, 부모, 자신이 일자를 이루는 노드(LL)2. 할아버지노드는 삽입 방향 반대로 회전3. 부모 노드는 검정, 할아버지 노드는 빨강으로 변경 제거 규칙1. 터미널 노드를 제거1. 제거할 노드의 두 자식 노드가 모두 NIL인 경우1. 해당 노드 제거 후 부모 노드를 NIL에 연결2. 제거할 노드의 자식 노드 중 하나가 NIL1. 해당 노드 제거 후 부모 노드에 나머지 노드 연결3. 제거할 노드의 자식노드에 NIL이 없음1. 왼쪽 자식 노드의 큰 값 혹은 오른쪽 자식 노드의 작은 값으로 대체2. 대체한 후 나머지 자식노드를 대체 노드의 자식으로 연결3. 제거한 노드가 빨간색인 경우에는 색 규칙이 올바름4. 검은색이라면 균형을 잡아야 함 균형을 잡는 방법1. 형제 노드가 빨간색인 경우1. 형제 노드의 색을 검정, 부모노드를 빨간색으로 변경2. 부모노드 왼쪽 회전, 부모노드를 검정색으로, 형제 노드를 빨간색으로 변경2. 형제노드와 형제노드의 자식노드들이 검은색이고 부모노드는 빨간색1. 형제 노드 빨간색, 부모 노드 검은색3. 형제노드와 형제노드의 자식노드, 부모 노드 모두 검정색1. 형제노드의 색을 빨간색으로 변경2. 부모노드에 대해 2번 규칙 적용4. 형제노드가 검은색, 형제 두 자식 노드 중 하나라도 빨간색 노드가 있고 바깥쪽 조카 노드가 검은 색인 경우1. 안쪽 조카는 검정, 형제 노드는 빨간색2. 형제 노드를 제거한 노드의 반대방향으로 회전3. 조카노드와 부모, 형제 노드 색 변경4. 부모 노드 제거 노드 반대방향으로 회전5. 형제 노드가 검은색이고 형제의 두 자식노드 중 하나라도 빨간색 노드가 있고 바깥쪽 조카가 빨간색인 경우1. 형제 노드를 부모 노드 색으로 변경2. 부모노드와 바깥쪽 조카 노드 색 변경3. 부모 노드를 제거된 노드의 방향으로 변경✅ 우선순위 큐와 힙개념큐: FIFO > 먼저 들어간 데이터가 먼저 나온다.우선순위 큐: 먼저 들어간 순서와 상관없이 우선순위에 따라 나온다.Enqueue: 삽입Dequeue: 삭제힙(heap): 완전 이진트리 - 최소 힙: 루트 노드가 가장 작은 값을 가지는 완전 이진 트리 - 최대 힙: 루트 노드가 가장 큰 값을 가지는 완전 이진 트리힙1. 삽입1. 마지막 노드로부터 부모 노드와 비교해가며 적절한 위치에 삽입2. 처음 삽입할 위치를 찾는 것은 어렵기 때문에 미리 마지막 삽입 노드 위치를 저장해둠2. 제거1. 마지막 삽입 노드를 루트 노드를 가져온 후, 자식 노드와 비교하면서 위치를 바꿈2. 마지막 삽입 노드의 위치를 마지막 이전에 삽입된 노드로 변경3. 성능: 삽입, 제거: O(log n) 새로 삽입될 위치 (`getInsertingParent`)1. 루트 노드인 경우1. 루트 노드의 왼쪽 자식으로 삽입2. 부모노드의 왼쪽 자식인 경우1. 오른쪽 형제, 부모 노드 오른쪽 자식으로 삽입3. 부모노드의 오른쪽 자식인 경우1. 부모노드의 오른쪽 형제 노드가 자식 노드를 가지는 경우1. 해당 형제 노드의 왼쪽 자식 노드로 내려감2. 오른쪽 형제 노드가 없는 경우1. 루트 노드부터 가장 왼쪽 노드로 내려감 힙 정렬최소 힙에서 dequeue를 하면 오름 차순 정렬최대 힙에서 dequeue를 하면 내림 차순 정렬성능: O(nlogn)📕 컴퓨터 구조✅ 하드웨어 만들기멀티플렉서: 여러 입력 중 하나를 선택하여 출력으로 내보내는 장치디멀티 플렉서: 하나의 입력을 여러 출력 중 하나로 내보내는 장치selection을 통해 선택입력 수에 따라 비트 수가 달라짐Selection이 가리키는 수에 따라서만 출력이 변경됨0 -> 0번1 -> 1번10 -> 2번선이 많이지기 때문에 터널을 통해 연결할 수 있다.디코더: n 비트의 입력을 2^n개의 출력 중 하나만 활성화하는 장치컨트롤 버퍼: 출력을 제어하는 장치 - 선을 끊어주는 역할을 한다.전압은 물리적으로 방해를 받을 수도 있기 때문에 출력을 제어할 수 있게 된다.✅ CPU 만들기반가산기1비트 두 개를 더할 때는 올림을 표현하는 carry와 합을 의미하는 sum 이 필요carry: AND 게이트sum: XOR> 1비트의 두 값만 더할 수 있기 때문에, 다비트 연산에서는 LSB 자리에만 쓰고, 나머지 자리에서는 전가산기를 써야 한다📌 전가산기전압은 물리적으로 방해를 받을 수도 있기 때문에 출력을 제어할 수 있게 된다.✅ 메모리조합 논리회로: 입력에 대해서만 출력하기 때문에 상태를 기억할 수 없음기본 게이트, 멀티플렉서, 디코더, 반가산기, 전가산기, ALU,,순차 논리회로(메모리 역할)출력을 다시 조합 논리회로의 입력으로 들어가야지 현재 상태를 만들어서 다음 상태를 결정시킬 수 있음SR LatchD latchJK latch클럭과 플리플롭여러 회로의 딜레이 차이로 인해 순차적으로 결과값이 출력되고 있다. -> 원하지 않는 출력을 받게된다.레지스터: 1비트 메모리 Latch를 연결해 여러 비트를 저장할 수 있는 메모리레지스터의 enable을 0으로 바꿔서 값이 다 처리될 때까지 기다렸다가 끝나면 enable을 1로 바꿔준다.클럭이 정해진 주기에 따라 enable을 직접 변경시켜준다.클럭이 1인 상태에서 출력 값이 계속 바뀔 수 있다는 문제가 있다.-> 트리거: 래치의 출력을 활성화하는 조건1. 레벨 트리거1. High Level: 입력이 1인 동안에만 반영2. Low Level: 입력이 0인 동안에만 반영2. 엣지 트리거1. Rising Edge: 0에서 1이 되었을 때 반영2. Falling Edge: 1에서 0이 되었을 때 반영-> 플리플롭: 래치 트리거를 엣지 트리거로 변경하는 것 레지스터데이터를 출력하고 LOAD를 통해 레지스터에 저장해두었다가 Enable을 통해 출력을 통제한다.8비트 레지스터 = 0~255까지 데이터 저장 가능CPU내부에 있어서 적은 메모리만 저장 RAM1비트 저장 - 래치 || 플립플롭8비트 저장 - 레지스터MSB를 포함한 4비트 = 명령어LSB를 포함한 4비트 = 메모리 주소메모리 주소는 0 ~ 15번까지 사용 가능RAM은 16개의 메모리 주소를 갖으며 하나의 메모리 주소는 8비트(1바이트)의 레지스터로 구성 => 16바이트 메모리-> 현대 컴퓨터는 최소 4GB의 램이다.address에서 주소를 받아서 디코더를 통해 출력된 값을 해당 메모리 주소에 연결해주면 각각의 레지스터에 값을 저장해둘 수 있다.레지스터의 출력을 멀티플레서에 연결하고 Enable을 통해 제어하면 값을 출력할 수 있다.후기Red-Black Tree나 우선순위 큐와 같은 이론이 한번에 이해가 되지 않았고 구현하는 과정이 익숙하지 않아서 이론과 함께 반복적으로 확인해보면서 구현을 거쳤던 것 같다. 반복적으로 개념을 익혀나가면서 구현하다보니 점점 어느정도 감이 잡히는 것 같다는 느낌이 들었고 미션을 통해 직접 과제를 구현하다보면 더 자료구조에 대해 가까워질 수 있을 것 같다.컴퓨터 구조를 만들어볼 수 있는 logisim 프로그램이 맥북에서는 설치가 안되거나 파일을 바로 열 수가 없어서 애 좀 먹었던 것 같다. 단축키를 몰라서 하나씩 조합을 하다보니 시간이 좀 걸렸지만 점점 강의를 따라하면서 이 또한 손에 점점 익어갔다.CPU에 들어가있는 레지스터라는 존재에 대해서만 알고 있었지만 레지스터가 어떻게 동작하는 지, 내부 회로가 어떤 식으로 연결되어있는 지 직접 구현해보면서 확인해보니 흥미로웠었고 RAM 또한 레지스터와 어떤 관계를 갖고 있는지 알 수 있어서 좋았던 것 같다.

컴퓨터 구조컴퓨터구조알고리즘

강동훈

[인프런 워밍업 클럽 4기 - CS] - 2주차 미션 (컴퓨터 구조)

문제다음 파일의 모든 연결을 터널로 대체해보세요.(회로 이미지와 .circ파일 첨부)8비트 32입력 MUX를 제작해보세요.(회로 이미지와 .circ파일 첨부)3. 10비트 입력 두 개(A, B)를 계산하는 ALU 만들어보세요.(회로 이미지와 .circ파일 첨부),32바이트 RAM을 만들어보세요. 디코더와 MUX는 logisim 기본 내장된 걸 사용해도 좋습니다.(회로 이미지와 .circ파일 첨부)후기어째서인지 맥북에서는 .circ 파일을 열 수가 없다. 연결할 응용프로그램을 logisim으로 연결할 수도 없고 logisim에서 파일을 찾아올 수가 없다.. 그래서 결국 새로운 logisim 파일을 열어서 기존 작업된 circ를 텍스트 파일로 열어서 해당 데이터를 새로운 circ 파일에 덮어써서 파일을 열어가며 작업했던 것 같다.. 그리고 가끔가다 작업했던 circuit 파일들도 사라져서 동일한 미션을 다시 만들기도 하였다 😃 그럼에도 여러번 만들면서 익숙해지다보니 확실히 강의에서만 듣고 이해하는 것보다 더 체감이 되는 것 같고 학습했던 내용에 대해 머리 속에 더 깊숙히 남아있는 것 같다. 특히 레지스터와 RAM과 같은 경우에는 어떤 역할을 하고 있는 지에 대해서만 알고 있었던 과거와는 달리, 직접 구현해보며 내부적으로 어떻게 동작하는 지 혹은 각각의 부품들이 어떤 관계를 갖고 있는 지 자세히 알 수 있어서 인상깊은 과제였다.

컴퓨터 구조컴퓨터구조

CS 1주차 발자국&미션

1주차 발자국학습알고리즘비선형 자료구조 - 트리 (Tree) : 노드와 링크로 구성포화 이진 트리 : 터미널 노드가 아닌 내부 노드들은 모두 2개의 자식 노드를 갖고 있음완전 이진 트리 : 포화 이진 트리에서 터미널 노드중 오른쪽 노드가 없는 트리 이진 탐색 (Binary Search) : 정렬된 상태의 데이터에서 특정 값을 빠르게 탐색, O(logN)이진 트리의 탐색전위순회 PreOrderTraversal ( 부모 노드 -> 왼쪽 노드 -> 오른쪽 노드 )중위순회 InOrderTraversal (왼쪽 노드 -> 부모 노드 -> 오른쪽 노드 )후위순회 PostOrderTraversal ( 왼쪽 노드 -> 오른쪽 노드 -> 부모 노드 )이진 탐색 트리 (Binary Search Tree) 규칙왼쪽 자식 노드는 부모 노드 보다 작은 값오른쪽 자식 노드는 부모 노드 보다 큰 값서브트리도 이진탐색트리 유지중복안됨탐색, 추가, 삭제 시 루트노드부터 비교시작해서 내려감삭제 case자식 노드가 없는 터미널 노드일 경우자식 노드 1개자식 노드 2개     1주차 미션컴퓨터 구조1. 4입력 AND, OR, NAND, NOR, XOR 연산의 진리표를 작성해보세요.2. 다음 불 방정식들을 여러 방법을 이용해 간략화 해보세요.A( (BB)’+ 0A) + (CC)' = (AB’) +CA( (B)' + 0) + (C)' = (AB') + CA(B') + C' = (AB') + CAB' + C' = AB' + C (B’B’) + (AD’ + (CA)’)D = B’ + (DC’) + (DA’)(B') + AD'D + (CA)'D = B' + (DC') + (DA')B' + A0 + (CA)'D = B' + (DC') + (DA')B' + (CA)'D = B' + (DC') + (DA')B' + (C' + A')D = B' + (DC') + (DA')B' + C'D + A'D = B' + DC' + DA'(A’B) + B(B1 + BC) = B(A’B) + B(B + BC) = B(A’B) + BB + BBC = B(A’B) + B + BC = B(A’B) + B = BA’B + B = BB = B B’(1C + BD) + DB = (B’C) + (DB)B’(C + BD) + DB = (B’C) + DBB’C + B’BD + DB = B’C + DBB’C + 0D + DB = B’C + DBB’C + DB = B’C + DB3. 다음 2진수를 10진수로 변환해보세요.110111 = (2^5) * 1 + (2^4) * 1 + (2^3) * 0 + (2^2) * 1 + (2^1) * 1 + (2^0) * 1 = 5510000001 = (2^7) * 1 + (2^6) * 0 + (2^5) * 0 + (2^4) * 0 + (2^3) * 0 + (2^2) * 0 + (2^1) * 0 + (2^0) * 1 = 12911111100000 = (2^10) * 1 +(2^9) * 1 +(2^8) * 1 + (2^7) * 1 + (2^6) * 1 + (2^5) * 1+ (2^4) * 0 + (2^3) * 0 + (2^2) * 0 + (2^1) * 0 + (2^0) * 0 = 2016101010 = (2^5) * 1 + (2^4) * 0 + (2^3) * 1 + (2^2) * 0 + (2^1) * 1 + (2^0) * 0 = 424. 다음 10진수를 2진수로 변환해보세요. ( 각 수를 2로 계속 나누어 나머지를 기록하여 거꾸로 읽기 )10 = 0 -> 1 -> 0 -> 1 = 1010 27 = 1 -> 1 -> 0 -> 1 -> 1 = 11011 86 = 0 -> 1 -> 1 -> 0 -> 1 -> 0 - > 1 = 1010110 516 = 0 -> 0 -> 1 -> 0 -> 0 -> 0 -> 0 -> 0 -> 0 -> 1 = 10000001005. 다음 불 방정식을 logisim을 이용해 회로를 만들어보세요.(회로 이미지와 .circ파일 첨부) (B’C) + (DB)(AB’) +CB’ + (DC’) + (DA’).circ 파일 링크 연결

컴퓨터 구조

강동훈

[인프런 워밍업 클럽 4기 - CS] - 1주차 미션 (컴퓨터 구조)

문제1. 4입력 AND, OR, NAND, NOR, XOR 연산의 진리표를 작성해보세요.(3입력 AND게이트의 예)| A | B | C | D | AND | OR | NAND | NOR | XOR | | --- | --- | --- | --- | --- | --- | ---- | --- | --- | | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |AND: 모든 값이 1일 경우에만 1OR: 하나의 값이라도 1이면 1NAND: AND 반대NOR: OR 반대XOR: (((A ⊕ B) ⊕ C) ⊕ D) > 두 입력이 같으면 0, 다르면 1 2.다음 불 방정식들을 여러 방법을 이용해 간략화 해보세요.1. A( (BB)’+ 0A) + (CC)' = (AB’) +C ㄴ A( (B)’+ 0A) + (C)' : 동일 법칙 ㄴ A(B’) + (C)' : 항등원 ㄴ AB’ + C’ 2. (B’B’) + (AD’ + (CA)’)D = B’ + (DC’) + (DA’) ㄴ (B’) + (AD’ + (CA)’)D : 동일 법칙 ㄴ (B’) + (AD’ + C’+ A’)D : 드모르간 법칙 ㄴ B’ + DC’+ DA’: 항등원 3. (A’B) + B(B1 + BC) = B ㄴ (A’B) + B(B + BC): 항등원 ㄴ (A’B) + B(B) : 흡수법칙 ㄴ (A’B) + B: 동일법칙 ㄴ B(A’ + 1): 결합법칙 ㄴ B(1): 항등원 ㄴ B 4. B’(1C + BD) + DB = (B’C) + (DB) ㄴ B’(C + BD) + DB = 항등원 ㄴ B’C + B’BD + DB = 분배법칙 ㄴ B’C + DB = 보완법칙다음 2진수를 10진수로 변환해보세요.1. 110111 = 1 + 2 + 4 + 16 + 32 = 55 2. 10000001 = 1 + 128 = 129 3. 11111100000 = 32 + 64 + 128 +256 + 512 + 1024 = 2016 4. 101010 = 2 + 8 + 32 = 42다음 10진수를 2진수로 변환해보세요.1. 10 = 1010(2) - 10/2 = 5 ...0 - 5/2 = 2...1 - 2/2 = 1...0 - 1/2 = 0...1 2. 27 = 11011(2) - 27/2 = 13...1 - 13/2 = 6...1 - 6/2 = 3...0 - 3/2 = 1...1 - 1/2 = 0...1 3. 86 = 1010110(2) - 86/2 = 43...0 - 43/2 = 21...1 - 21/2 = 10...1 - 10/2 = 5...0 - 5/2 = 2...1 - 2/2 = 1...0 - 1/2= 0...1 4. 516 = 100000100(2) - 516/2 =258...0 - 258/2 = 129...0 - 129/2 = 64...1 - 64/2 = 32...0 - 32/2 = 16...0 - 16/2 = 8...0 - 8/2 = 4...0 - 4/2 = 2...0 - 2/2 = 1...0 - 1/2 = 0...1다음 불 방정식을 logisim을 이용해 회로를 만들어보세요.(회로 이미지와 .circ파일 첨부)1. (B’C) + (DB) 2. (AB’) +C 3. B’ + (DC’) + (DA’) 1. (B’C) + (DB)2. (AB’) +C3. B’ + (DC’) + (DA’)후기불 대수나 불 연산에 대해서 개념을 공부할 때는 크게 와닿지 못하였고 외우기 바빴지만 직접 미션을 통해서 작업해보고 불 대수에서 나온 여러 법칙들이 왜 사용되게 되는지 흐름을 이해할 수 있었다. 또한 직접 프로그램을 통해 회로를 연결해보는 경험이 불 연산을 더 깊이 체감해볼 수 있는 경험이 되었다.

컴퓨터 구조미션컴퓨터구조

강동훈

[인프런 워밍업 클럽 4기 - CS] - 1주차 발자국

📕 자료구조와 알고리즘(심화)✅ P-NP문제가 어려운 지, 쉬운 지 혹은 해결이 가능한 지 불가한 지 판단하는 것.결정 문제: 참 혹은 거짓을 대답할 수 있는 문제최적화 문제: 최적의 해를 찾을 수 있는 문제 (대부분의 최적화 문제는 결정 문제가 된다)결정론적 튜링 머신: 다음 상태가 유일한(오직 하나의) 상태로 결정되는 것비결정론적 튜링 머신: 현재 상태와 기호에 대해 여러 개의 가능한 다음 상태가 존재할 수 있는 것 (현실에는 존재 X 가정으로 상상)다항 시간: 어떤 문제의 해결 시간을 다항식으로 표현이 가능한 것다항 시간 내 1. 상수 시간: O(1) 2. 로그 시간: O(log n) 3. 선형 시간: O(n) 4. 로그-선형 시간: O(nlog n) 5. 다항 시간: O(n^k) 다항 시간 외 1. 지수 시간: O(k^n) 2. 팩토리얼 시간: O(n!) P 문제: 결정문제에 대해 결정론적 튜링 머신을 통해 다항 시간 내에 답을 구할 수 있는 문제NP 문제: 결정문제에 대해 비결정론적 튜링 머신을 사용하여 다항 시간 내에 답을 구할 수 있는 문제NP Hard: 모든 NP문제들을 다항 시간 내에 어떤 문제 A로 환원이 가능한 것NP Complete: NP-Hard이면서 NP에 포함되는 문제결정론적 / 비결정론적 문제ex) 완전 이진 트리 형태로 되어 있고 깊이가 k인 갈림길에 하나의 리프에만 보물이 있다고 가정결정론적: 한 번씩 모든 길을 거쳐서 보물을 확인 > 최악의 경우 2^k의 시간이 걸린다.비결정론적: 갈림길을 마주할 때마다 분신술을 사용하여 동시에 모든 리프 확인 > k의 시간이 걸린다.어떠한 힌트가 주어지게 된다면 비결정론적 문제들은 결정론적 문제로 검증이 가능모든 결정론적 문제들은 비결정론적 문제들에 속함 (P⊆NP) ✅ 트리와 이진 트리트리: 하나의 노드에서 점차 내려가는 자료구조Edge: 각 노드를 연결하는 선루트 노드: 트리에서 최상위 노드터미널 노드: 자식 노드가 없는 노드인터널 노드: 터미널 노드를 제외한 노드서브 트리: 트리 구조 내에 작은 트리 (터미널 노드 또한 루트 노드만 있는 트리라고 판단)레벨: 각트리의 높이이진 트리: 각 노드는 최대 2개의 자식 노드를 갖는 트리포화 이진 트리: 트리의 최대 레벨에 있는 모든 터미널 노드가 꽉 찬 트리완전 이진 트리: 최대 레벨을 제외한 나머지 레벨에는 모두 노드가 존재하고 최대 레벨의 노드는 왼쪽부터 채워진 트리순회: 트리의 노드들을 순회전위: 루트 노드 먼저 순회중위: 루트 노드를 중간에 순회후위: 루트 노드를 마지막에 순회 ✅ 이진 탐색 트리이진 탐색 알고리즘: 정렬되어 있는 배열에서 반씩 나눠 탐색을 해가며 범위를 줄여나가는 알고리즘이진 탐색 트리이진 탐색은 정렬된 상태에서만 가능하며 배열의 경우 데이터 삽입, 삭제가 비효율적이다.해시 테이블은 데이터 조회, 삽입, 제거가 빠르지만 해시 함수에 따라 성능이 달라지고 데이터를 저장할 메모리가 필요하다.이진 탐색 테이블은 데이터 조회, 삽입, 제거가 빠르고 해시 테이블에 비해 메모리 사용량이 적다규칙자식 노드는 모두 이진 트리여야 한다.중복된 노드의 데이터는 없어야 한다.A 노드의 왼쪽 자식 노드값은 A 노드값보다 작아야 한다.A 노드의 오른쪽 자식 노드값은 A 노드값보다 커야 한다.자식 트리도 상위 규칙을 따라야 한다.평가:트리가 만들어졌을 때 : O(logn)트리가 잘 만들어지지 않을 때 : O(n)이진 트리는 균형을 유지하는 것이 성능에 중요삽입, 삭제 시 트리의 균형이 깨질 가능성이 크다.✅ AVL 트리이진 트리에서는 균형을 유지하는 것이 중요하다.규칙:왼쪽과 오른쪽 자식트리의 높이가 최대 1까지만 차이가 날 수 있다.균형이 맞지 않는 트리는 회전을 통해 균형을 다시 맞출 수 있다.(못 맞추는 경우도 존재)회전LL회전: 오른쪽으로 뻗은 트리에 대해 적용 가능RR회전: 왼쪽으로 뻗은 트리에 대해 적용 가능LR회전: 왼쪽으로 꺾였다가 안쪽으로 꺾인 트리 적용 가능RL회전: 오른쪽으로 꺾였다가 안쪽으로 꺾인 트리 적용 가능📕 컴퓨터 구조✅ 컴퓨터 구조블랙박스: 내부 작동 원리는 모르더라도 입력에 따라 출력이 예측 가능한 것들모듈화: 큰 문제를 작은 문제로 분할하여 복잡함을 단순화 시키는 방법역사:수동식 계산기- 주판기계식 계산기- 계산봉, 파스칼린, 라이프니츠 휠자동 계산기- 차분 기관(톱니바퀴로 계산 결과 활용), 해석 기관(프로그래밍 가능)디지털 계산기- ENIAC- 폰노이만 구조(중앙 처리 장치, 메모리, 입출력 장치)- 트랜지스터 (진공관 대체)- 집척 회로- ,,, 동작방식컴퓨터는 0,1로 이루어진 명령어만 해석이 가능하다.기계어: 0,1로 이루어진 명령어컴파일러: 정적 코드를 기계어로 변환하는 과정에서 에러 발견 가능하고 실행속도가 매우 빠름 (c, C++) / 변환 과정이 오래 걸림인터프리터: 한 줄씩 기계어로 변환하기에 프로그램 실행 도중 문법 오류 발생 가능, 실행 속도가 느림✅ 컴퓨터 구성 요소CPU:프로그램 카운터: 다음 실행할 명령어 저장제어 유닛: 명령어 해석 및 실행산술 논리 연산장치: 산술, 논리 연산을 수행레지스터: 용량은 적지만 속도가 빠른 CPU 내장 메모리버스: 데이터 전송 통로Memory:RAM(Random Access Memory): 어떤 메모리에 접근하여도 접근 시간이 동일하며 휘발성ROM(Read Only Memory): 쓰기가 불가하며 비휘발성이기 때문에 컴퓨터 동작을 위한 BIOS가 저장  1. CPU가 프로그램 실행 시, 코드와 데이터를 RAM에서 가져온다. 2. 연산에 필요한 데이터 레지스터 저장 3. 연산 이후 결과를 RAM에 저장 4. 자주 사용되는 데이터 CPU 내부에 캐시 메모리 저장 (< 레지스터) / > RAM) 주변 장치:입출력 장치1. 키보드 / 마우스2. 모니터 / 스피커 / 프린터보조기억 장치1. HDD / SSD32, 64bit 컴퓨터:1bit (0,1 표현) = 21byte = 8bit = 2564byte = 32bit = 약 42억8byte = 64bit = 약 18경플리플롭: 1비트를 저장할 수 있는 회로컴퓨터 비트에 맞춰서 레지스터와 버스의 비트 수가 맞춰짐- 64비트 -> 64비트 레지스터 / 64개의 버스비트 수에 따라 저장할 수 있는, 계산할 수 있는 한계가 정해짐RAM이 여러개를 갖고 있더라도 CPU에서 처리할 수 있는 한계가 있음컴퓨터의 성능은 클럭, 명령어 최적화, 메모리, 레지스터 속도가 중요✅ 불 대수디지털 장치들은 불 대수 기반으로 작동한다.true: 1false: 0 불 연산:NOT: 입력값의 반대AND: A와 B가 같을 때만 1 (논리곱)OR: A와 B중 하나만 1이면 1 (논리합)NAND: AND 연산의 반대NOR: 하나라도 1이면 1XOR: 하나만 1일 경우에만 1 (두 입력이 다를 때)불 대수의 성질과 법칙항등원:원산 결과가 자기 자신이 되는 수AND (⋅) / A ⋅ 1 = AOR (+) / A + 0 = A교환법칙: 피연산자의 순서를 바꿔도 결과는 동일하다A ⋅ B = B ⋅ A결합법칙: 괄호의 위치를 바꿔도 결과 동일(A ⋅ B) ⋅ C = A ⋅ (B ⋅ C)분배법칙A ⋅ (B + C) = A⋅B + A⋅C동일법칙: 동일한 값을 두 번 연산해도 원래 값A ⋅ A = A이중 부정법칙: 두 번 부정하면 원래 값으로 돌아감흡수법칙A(A + B)= AA + AB ← 분배법칙= A + AB ← AA = A (동일법칙)= A(1 + B). ← A로 묶음 (결합법칙의 역)= A(1) ← 1 + B = 1 (항등원)= A 드모르간 법칙AND = NOT A OR NOT BA NOR B = NOT A AND NOT B불 함수함수: 입력 값에 따라 출력 값이 변하는 것불함수: 입력 값과 출력 값 모두 boolean 진리표 변환결과가 0인 행은 제외(Don't care 행)모든 행을 AND 연산으로 만들고결과값에 맞춰서 수정✅ 비트10진법과 2진법1개의 비트로 표현할 수 있는 수의 개수 = 2^1개2개의 비트로 표현할 수 있는 수의 개수 = 2^2개3개의 비트로 표현할 수 있는 수의 개수 = 2^3개,,, 10진법 > 2진법 변환10진수를 2로 나눌 수 있을 때까지 나누는 것ex) 9 > 9/2 = 4...1 > 4/2 > 2...0 > 2/2 > 1...09(10) = 1001(2) 16진법0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F16진법을 사용하는 이유는 2진수를 10진법으로 표현하는 것보다 더 간단하기 때문16은 2^4이기 때문에 간단히 변환 가능11111111(2) = FF(16)Ox1001 => 16진수 표기법 빅 엔디안과 리틀 엔디안MSB: 가장 왼쪽 비트LSB: 가장 오른쪽 비트 빅 엔디안: MSB를 가장 낮은 주소부터 채우는 방식리틀 엔디안: LSB를 가장 낮은 주소부터 채우는 방식하나의 방식으로 통일해서 사용해야 함. 오버플로우와 인터럽트오버플로우: 값이 데이터 타입(또는 레지스터)이 표현할 수 있는 범위를 초과했을 때 발생하는 현상인터럽트: CPU가 실행 중인 작업을 중단하고 인터럽트 서비스를 실행 음수- 부호없는 정수 (양수만 표현 가능)0000 ~ 1111 = 0 ~ 15까지 16개 값 표현- 부호있는 정수 (양수, 음수 표현 가능)0000 ~ 1111 = -8 ~ 7까지 16개 값 표현MSB가 부호를 표현(0이면 양수, 1이면 음수) > 나머지 3비트로만 값 표현 가능예: +5 → 00000101 (8비트 기준)음수 표현 만들기 (예: -5)① 비트를 반전 (1의 보수): 11111010② +1 더함: 11111010 + 1 = 11111011 00000101 ( +5 ) + 11111011 ( -5 ) ----------- 00000000 → 결과: 0 후기직접 프로그램을 통해 불 연산을 시각화해볼 수 있다는 것이 가장 인상깊었다. 기존에는 논리 연산을 통해서 조건문을 작성할 때를 제외하고는 생각해본 적이 없었는데, 더 하위 레벨에서 불대수, 불함수, 그리고 불 연산에서 자주 사용되는 수학적인 법칙까지 직접 공부해보고 이를 통해 간단한 프로그램을 만들어 보는 경험이 어렵지 않으면서 가장 크게 체감을 할 수 있었던 것 같다.  자료구조와 알고리즘 또한 트리가 나오게된 배경부터 AVL 트리가 탄생하게 된 계기까지 그 흐름을 잘 따라갈 수 있었고 AVL 트리만의 특징과 균형을 잡기 위한 여러 회전 원리에 대해서도 탄탄히 공부해볼 수 있었다.

컴퓨터 구조컴퓨터구조감자CS

서희원

[인프런 워밍업 클럽 스터디 3기] 3주차 발자국

운영체제가상메모리메모리 공간이 부족해서 프로그램을 실행하지 못하는 문제를 해결물리 메모리 크기랑 위치를 생각하지 않고 0번지에서 시작한다고 생각하면 됨프로세스(사용자) > 가상 메모리 (메모리 관리자) > 물리 메모리가상 메모리의 크기: 물리 메모리의 크기와 CPU 비트 수에 따라 결정됨 동적 주소 변환(Dynamic Address Translation, DAT)프로세스가 메모리 접근을 시도 할 때마다 발생CPU가 가상 주소 생성 > MMU(Memory Management Unit)가 변환 작업 시작 > 페이지 테이블 참조 > 물리적 주소로 변환 > 실제 메모리 접근메모리 부족 상황에서는 Swap 영역으로 페이지를 이동 (Swap Out)스왑 대상 페이지 선정 > 페이지 테이블 엔트리 수정 > 수정된 페이지라면 디스크 쓰기 > 물리 메모리에서 해제 이런 메모리 할당/비할당을 어떻게 관리하는지는 아래의 정책 별로 나뉨Segmentation (가변 분할 방식)메모리를 어떻게 구분하나: 메모리의 역할에 따라 구분(코드, 데이터, 라이브러리, 스택, 힙)어떻게 바꾸나: 세그멘테이션 테이블을 이용해서 변환CPU에서 받은 논리주소와 Bound Address의 크기를 비교논리주소 < Bound Address > 논리주소 + Base Address = 물리주소논리주소 > Bound Address > 메모리 침범 에러 발생 Paging (고정 분할 방식)메모리를 어떻게 구분하나: 구분하지 않음어떻게 바꾸나: 정해진 크기의 페이지로 나눠둠논리주소 공간 = 페이지 / 물리주소 공간 = 프레임페이지, 오프셋을 통해서 프레임 번호를 알아내서 물리주소로 변환 Paged Segmentation (Segmentation + Paging)위 2개의 장점을 취한 방식현대의 운영체제는 페이징과 페이지드 세그멘테이션을 적절히 섞어서 사용 Demand Paging (가져오기)필요한 모듈만 메모리에 올라가서 실행조만간 쓸 것 같은 데이터만 메모리에 두고 안 쓰는 거 같은 거는 스왑에 저장해둔다스왑영역 = 보조저장장치어떻게 안쓰는거 같은거를 구분하나?접근비트/변경비트/유효비트를 통해 구분페이지 교체 알고리즘을 이용Page Fault > 스왑영역에서 메모리로 불러들이기 (= 공간을 만들어줘야 함) > 교체정책을 통해 어떤 애를 스왑으로 옮길지 결정RandomFIFOOptimum: 앞으로 가장 오랫동안 쓰이지 않을 페이지 선택 > 구현 불가LRU: 최근 가장 사용 적은 페이지 (실제로 Optimum과 성능 비슷)2차 기회 페이지 교체 알고리즘: 자주 사용하는 페이지한테 기회를 한 번 더 줌입출력장치주변장치: 그래픽카드, HDD, SSD, 키보드, 마우스 등이 주변장치들은 메인보드에 있는 버스로 연결된다.레지스터를 이용해서 장치의 상태와 데이터를 보관해서 저장하고, CPU가 이 값을 사용하기도 한다 캐릭터 디바이스데이터의 전송 단위가 캐릭터(글자)마우스/키보드/직병렬포트/사운드카드상대적 크기가 작음블록 디바이스데이터의 전송 단위가 블록하드디스크/SSD/그래픽카드크기가 큼 파일시스템파일은 하드디스크/SSD 같은 저장장치에 저장파일관리자가 파일테이블을 이용해서 파일 정리운영체제는 파일을 관리하기 위헤 정보를 관리하는 파일 디스크럽터를 갖고 있음  자료구조와 알고리즘선택정렬1번째 원소부터 마지막 원소까지 비교 후 가장 작은 값을 1번째 원소로 가져옴삽입정렬정렬되지 않은 영역에서 하나씩 빼서 정렬된 영역의 적절한 위치에 원소 삽입병합정렬Divide and Conquer(분할 정복) 사용배열의 원소를 1개가 될 때까지 배열을 반으로 쪼갠 다음 거기서부터 하나씩 정렬을 하며 병합 하는 것재귀를 사용퀵정렬Divide and Conquer(분할 정복) 사용재귀를 사용정렬하기 전에 배열에 있는 숫자 중 하나를 피벗으로 설정각각 왼쪽 오른쪽에서 이동하면서 피벗보다 큰/작은 수를 만나면 멈추고 둘을 스왑성능만 보면 병합정렬이 더 좋다고 생각할 수 있지만 퀵정렬이 메모리 공간을 덜 차지해서 더 좋다고 평가됨추가적인 배열을 생성하지 않음 (제자리 정렬)동적프로그래밍메모이제이션피보나치 수열재귀로 구현했더니 중복계산이 많이 발생이를 해결하기 위해 계산 결과를 저장해서 여러번 같은 계산을 하지 않도록 하는 기법 == 메모이제이션 타뷸레이션메모이제이션 = 하향식 / 타뷸레이션 = 상향식미리 계산에 필요한 모든 값을 계산 후 테이블에 저장 12586269025 fibonacci 함수 실행 시간 : 86590ms 12586269025 enhanced fibonacci 함수 실행 시간 : 0ms 12586269025 tabulation Fibonacci fibonacci 함수 실행 시간 : 1ms재귀가 더 직관적이라면 메모이제이션을 사용하는 것이 유리아니라면 타뷸레이션 사용   회고👏 칭찬하고 싶은 점일이 정말 더 바빴는데 한번도 강의를 밀리지 않았다 😅 아쉬웠던 점너무 일이 바빠서 강의 들면서 졸거나 해서 대충 넘어간 부분이 있는거 같다..

컴퓨터 구조인프런워밍업클럽스터디

w3w

CS_전공지식_첫번째미션

운영체제   while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?폴링 방식의 단점을 보완한 인터럽트 방식을 사용할 수 있습니다. 인터럽트는 다음과 같은 과정으로 진행됩니다. cpu가 입출력 관리자에게 입출력 명령을 내리고 다른 작업을 합니다. 입출력 관리자가 입출력이 완료됐을 때 cpu에게 신호를 주고 cpu는 그 신호를 받아서 인터럽트 서비스 루틴을 실행시켜 작업을 완료합니다.   2. 프로그램과 프로세스가 어떻게 다른가요?프로그램은 하드디스크 등과 같은 저장장치에 저장된 명령문의 집합체입니다. 프로세스는 간단하게 실행 중인 프로그램이라고 할 수 있습니다. 하드디스크에 저장된 프로그램이 메모리에 올라갔을 때 실행 중인 프로그램을 프로세스라고 부릅니다. 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티 프로그래밍은 메모리에 여러 개의 프로세스가 올라온 것이고, 멀티프로세싱은 cpu가 여러 개의 프로세스를 처리하는 것입니다.  4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?운영체제는 여러 개의 프로세스를 전부 관리하고 공평하게 실행시켜야 합니다. 프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 pcb라는 것을 만들고 저장합니다. pcb들은 연결리스트라는 자료 구조로 저장됩니다. 운영체제는 프로세스가 종료되면 연결리스트에서 해당 pcb를 제거합니다. 이러한 과정으로 운영체제는 프로세스를 관리하기 위해서 pcb를 사용합니다. 5. 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭은 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 기존에 실행중이던 프로세스를 저장하고 실행할 프로세스의 상태값으로 교체하는 것입니다.  자료구조와 알고리즘 1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?이유를 함께 적어주세요.덱을 선택할 것입니다. 교실의 학생은 보통 가나다 순으로 번호를 부여받습니다. 새로 들어오는 학생이 들어와 있는 학생 보다 뒷 번호를 받을 수도 있고 앞 번호를 받을 수도 있기 때문에 양쪽에서 데이터를 삽입할 수 있는 덱이 가장 적절할 것 같습니다.  2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐를 선택할 것입니다. 큐는 먼저 들어온 데이터를 먼저 처리합니다. 이는 먼저 들어온 주문이 가장 먼저 나가야 하는 주문을 받는 프로그램과 동일한 처리 과정이라 생각하기 때문입니다.  

컴퓨터 구조

w3w 2024.10.06
강동훈

[인프런 워밍업 클럽 4기 - CS] - 3주차 미션 (컴퓨터 구조)

문제STOREB(1001) 명령어를 만들어보세요.(OPcode는 1001이고 operand가 가리키는 RAM주소에 현재 레지스터B의 데이터 저장하는 기능)1. operand 를 MAR에 저장하기 위해 IO와 MI 활성화 레지스터 B의 데이터를 램에 저장하기 위해 BO과 RI을 활성화STOREB(1001) 명령어 작업 A와 B를 비교해서 A와 B가 같으면 0, A가 더 크면 1, B가 더 크면 2를 출력 레지스터에 출력하는 어셈블리어를 작성해보세요.JMPC는 A < B일 때 점프, JMPZ는 A == B일 때 점프해주는 명령어이기 때문에 각 분기로 나눠 실행할 명령어 코드로 점프를 시켜줬고 하위에는 값 A, B와 결과를 담을 상수(0, 1, 2)를 저장해주었다.LOADA 15 // A 값 SUB 14 // A - B JMPC 7 // A < B, 7번 코드 실행 JMPZ 9 // A == B, 9번 코드 실행 LOADA 12 // A > B, 값 1 출력 OUT HLT LOADA 13 // 값 2 출력 OUT LOADA 11 // 값 0 출력 OUT 0 // A == B 출력값 1 // A > B 출력값 2 // A < B 출력값 7 // 값 B 7 // 값 A하지만 상위 코드에는 치명적인 문제점이 있다.A > B일 경우에는 OUT 레지스터에 값을 출력하고 프로그램을 종료시키는데, 그 외의 경우는 OUT만 시켜주고 프로그램을 종료시키지 않다보니 무한 루프가 돌게 되며 처음에는 올바른 결과가 출력되다가 루프를 통해 결과값이 바뀌게 된다.그래서 아마 문제에선 A,B 값이 주어지지 않았으니LOADA 15 // A 값 SUB 14 // A - B JMPC 7 // A < B, 7번 코드 실행 JMPZ 9 // A == B, 9번 코드 실행 LOADA 12 // A > B, 값 1 출력 OUT HLT LOADA 13 // 값 2 출력 OUT HLT LOADA 11 // 값 0 출력 OUT HLT 0 // A == B 출력값 1 // A > B 출력값 2 // A < B 출력값이렇게 각 조건마다 프로그램을 종료시키는 명령어를 넣고, A와 B의 값은 수동으로 혹은 다른 기능에 의해 삽입해야하지 않을까 싶다. 후기미션을 제대로 수행했는지 감도 안잡힐 정도로 개념이 어려웠던 것 같다. 사실 미션은 다 틀린 것 같은데 최대한 아는 내용에서 머리를 굴려서 문제를 풀었던 것 같다 😅 그럼에도 개념을 계속 복습하면서 문제를 풀어서 제출하는 것에 의의를 두었고 처음 어셈블리어까지 혹은 컴퓨터 회로 구조까지 내려가면서 딥하게 볼 수 있어서 더 인상 깊었던 로드맵이었고 현재는 나에게 크게 와닿지는 않겠지만 나중에 업무를 하며 분명히 나에게 도움이 될 때가 올 것이라고 확신할 수 있을 것 같다 :)

컴퓨터 구조컴퓨터구조

고차원정신줄

인프런 워밍업 클럽 4기 CS - 2주차 발자국

디지털 논리 회로의 핵심 구성 요소디지털 회로는 정보를 처리하고 저장하기 위해 다양한 논리 회로들을 사용합니다. 이 회로들은 크게 조합 논리 회로와 순차 논리 회로로 나눌 수 있어요.1. 정보 선택 및 분배 회로주어진 여러 정보 중 필요한 것을 선택하거나, 하나의 정보를 여러 목적지로 분배하는 역할을 합니다.멀티플렉서 (Multiplexer, MUX)역할: 여러 개의 입력(예: 2n개) 중 하나를 선택하여 출력합니다. 마치 여러 개의 물건 중 하나를 고르는 것과 같아요.선택 신호: '선택 신호(Select Line)'를 통해 어떤 입력을 출력할지 결정합니다.예시: 4:1 MUX는 4개의 입력 중 1개를 선택하며, 이를 위해 2개의 선택선이 필요해요.디멀티플렉서 (Demultiplexer, DEMUX)역할: 하나의 입력을 받아, 선택된 하나의 출력으로 전달합니다. 마치 하나의 물건을 여러 목적지 중 한 곳으로 보내는 것과 같아요.선택 신호: '선택 신호'를 통해 어느 출력으로 보낼지 결정합니다.디코더 (Decoder)역할: n개의 입력을 받아, 2n개의 출력 중 오직 하나만 활성화(1로 만듦)시킵니다.활성화: 특정 입력 조합에 대해 해당하는 출력 하나만 '1'이 되고 나머지는 모두 '0'이 됩니다.예시: 3:8 디코더는 3개의 입력에 대해 8개의 출력 중 하나만 활성화됩니다.주요 사용처: 특정 주소나 명령어를 인식하고 선택하는 데 사용됩니다.2. 제어 및 데이터 흐름 관리 회로제어 신호를 관리하고 데이터 흐름의 안정성을 유지하는 데 사용됩니다.컨트롤 버퍼 (Control Buffer)역할: 제어 신호나 제어 정보를 일시적으로 저장하거나 전달하는 완충 회로입니다.주요 기능:타이밍 조절: 제어 신호 전달 시 속도 차이를 조절하여 동기화 문제를 해결합니다.안정성 유지: 제어 흐름을 안정적으로 유지하며, 경우에 따라 컨트롤 레지스터(Control Register)와 혼용되기도 합니다.사용처: CPU 내부, 메모리 컨트롤러, 입출력(I/O) 장치 제어 등 다양한 곳에서 사용됩니다.3. 연산 회로이진수를 이용한 덧셈을 수행하는 데 사용되는 기본적인 회로입니다.반가산기 (Half Adder)역할: 두 개의 1비트 이진수(A, B)를 더합니다.출력: 합(Sum)과 자리올림(Carry)이 있습니다.논리식:Sum=A⊕B (XOR 연산)Carry=A∧B (AND 연산)한계: 이전 자리에서 발생한 자리올림 값(Carry-in)을 처리할 수 없습니다.전가산기 (Full Adder)역할: 세 개의 1비트 이진수(A, B, 그리고 이전 자리의 자리올림 값인 Carry_in)를 더합니다.출력: 합(Sum)과 자리올림(Carry_out)이 있습니다.논리식:Sum=A⊕B⊕Carry_inCarry_out=(A∧B)∨(B∧Carry_in)∨(A∧Carry_in)특징: 자리올림 입력을 처리할 수 있어 여러 비트의 덧셈(다비트 덧셈)에 활용됩니다.4. 논리 회로의 분류회로의 동작 방식과 기억 기능 유무에 따라 크게 두 가지로 나뉩니다.조합 논리 회로 (Combinational Logic Circuit)특징: 현재 입력에 의해서만 출력이 결정되며, 과거 상태를 기억하지 않습니다. (메모리 기능 없음)동작: 입력이 바뀌면 출력이 즉시 바뀝니다. 클럭 신호가 필요 없습니다.예시: 가산기(Adder), 디코더(Decoder), 인코더(Encoder), 멀티플렉서(MUX), 비교기 등이 있습니다.순차 논리 회로 (Sequential Logic Circuit)특징: 현재 입력과 과거 상태(기억된 값)에 따라 출력이 결정됩니다. 기억 기능(메모리)을 포함합니다.동작: 클럭(Clock) 신호에 따라 타이밍 기반으로 동작하며, 출력이 시간의 흐름에 따라 변하거나 유지됩니다.예시: 플립플롭(Flip-Flop), 레지스터(Register), 카운터(Counter), FSM(상태 기계), 메모리 등이 있습니다.5. 순차 논리 회로의 기본 소자순차 논리 회로의 핵심인 기억 소자들입니다.클럭 (Clock)역할: 디지털 회로 전체의 동작 타이밍을 결정하는 주기적인 펄스 신호입니다.동작 기준: 클럭의 상승 엣지(↑)나 하강 엣지(↓)에서 회로가 동작하도록 설계됩니다.래치 (Latch)SR 래치 (Set-Reset Latch)역할: S(Set), R(Reset) 두 입력으로 출력 Q를 제어하며, 이전 상태를 기억하는 순차 회로의 기본 형태입니다.문제점: S=1, R=1일 때 출력이 불안정해지는 '금지 상태'가 발생합니다.D 래치 (Data or Delay Latch)역할: SR 래치의 금지 상태 문제를 해결했습니다.입력: D(Data)와 Enable (또는 Clock)이 있으며, Enable이 '1'일 때만 D 값이 출력 Q로 전달됩니다.특징: 항상 안정적으로 동작하며, 메모리 소자에 많이 사용됩니다.JK 래치역할: SR 래치의 금지 상태를 해결한 또 다른 형태입니다.입력: J, K, 그리고 Clock이 있습니다. J는 Set, K는 Reset 역할을 합니다.특징: J=K=1일 때 출력이 반전되는 특징이 있어 플립플롭 구현에 주로 사용됩니다.플립플롭 (Flip-Flop)역할: 1비트의 정보를 저장할 수 있는 순차 논리 회로입니다.동작: 클럭 신호에 의해 상태가 변하거나 유지됩니다.종류: D, JK, T 등 다양한 종류가 있습니다. (래치와는 클럭 동기화 방식에서 차이가 있습니다.)레지스터 (Register)역할: 여러 개의 플립플롭을 묶어 만든 구조로, 보통 8, 16, 32비트 등 데이터를 임시 저장하는 데 사용됩니다.특징: CPU 내부에서 동기식으로 동작하며 고속 데이터 처리에 필수적입니다.RAM (Random Access Memory)역할: 데이터를 자유롭게 읽고 쓸 수 있는 임의 접근 메모리입니다.특징: 전원이 꺼지면 데이터가 사라지는 휘발성 메모리입니다.접근 방식: 주소를 지정하여 원하는 위치의 데이터를 직접 접근할 수 있습니다.

컴퓨터 구조컴퓨터구조

정예은

[ 워밍업클럽 4기 ] 컴퓨터 구조와 자료구조 알고리즘 - 1주차 발자국

1⃣강의 내용  컴퓨터 구조 불대수 (0과1 또는 참,거짓으로만 표현되는 논리함수)에 대해 학습하였고, 불대수로 오늘날의 디지털회로(컴퓨터)를 표현하고 계산된다는 점을 알게되었다.특히나, 불대수의 법칙으로 어려운 방정식을 쉽고 깔끔하게 리팩토링 된다는 점이 매력적이였고논리 회로로(그림) 직관적으로 계산할 수 있다는 점이 흥미로웠다.그러나 불대수 법칙들을 증명하는 과정에서 흡수법칙과 드모르간 법칙은 오늘날 가장 많이 사용되는 법칙인데, 증명 과정이 아직 익숙치 않고 확실히 이해가 어려웠다. (특히 A + (A · B) = A가 왜 되는지 모르겠음).그래서 다음 포스팅에 흡수법칙은 진리표로, 드모르간 법칙은 논리식으로 풀어보며 더 깊이 파고들어볼 계획이다. 자료구조와 알고리즘 트리는 말그대로 나무 처럼 생겼음 ( ex.회사 조직도,운영체제의 파일시스템 )하나의 노드에서 여러가지의 나뭇가지로 가지치기 하며 내려가는것 = "계층구조"를 표현하기에 제격이다.1. 노드 Node데이터를 담는 가장 작은 단위(덩어리)2. 엣지 Edge각 노드를 연결하는 선3. 루트노드 Root Node트리노드에서 가장 최상위의 노드4. 터미널 노드 Terminal Node자식노드가 없는 부모노드참고로, 터미널노드는 루트노드만 있는 트리로 볼 수 있음5. 인터널 노드 Internal Node루트노드,터미널노드를 제외한 노드6. 서브트리루트노드인 A인 입장에선, 3개의 서브트리가 연결된 구조이진트리란? (Binary Tree)Tree에서 어떤 규칙을 지켜야지 Binary Tree라고 불리운다.그 규칙은 무엇일까?자식노드가 최대 "2개" 만 가져야지 이진트리이다.트리의 레벨과 높이트리는 아래로 갈 수록 레벨이 높다.이 레벨의 최대 단위를 "높이"라고 표현함 .즉 레벨이 3이면, 이 트리의 높이도 3이다.포화 이진 트리트리의 최대 레벨에 있는 모든 터미널 노드가, 꽉 찬 트리예 ) 트리 높이가 3이며, 레벨3에 있는 노드(=터미널노드)들이 꽉 차있으므로 노드 추가가 불가한 상태만약, 터미널노드가 꽉 차있지 않으면? 노드 추가 가능2⃣학습 회고 🤔질문 | BIOS란 무엇일까?Basic Input Output System의 약자로 , 컴퓨터 킬 때 가장 먼저 실행되는 프로그램.주로 하드웨어가 정상적인지 검사하고, 정상인 경우 하드디스크나 SSD등에서 운영체제를 찾아 메모리로 불러오는 작업(부팅) 을 한다고 한다!.또한, 부팅 순서나 시스템 시간 + 메모리 정보 등 각종 하드웨어 설정을 관리하는 프로그램. 🤔캐시메모리는 어디에 위치하는가?CPU레지스터와 별도로 구분되는 메모리 공간임.메인 메모리 : 앞으로 사용될 것 같은 데이터 미리 저장👉🏻 CPU에서 메인메모리 데이터를 참조시 속도가 더 빠른 캐시를 먼저 "조회 "👉🏻 만약 캐시 데이터가 있다면? 레지스터로 가져와 계산 진행 !크게 L1,L2,L3 나눠져 있음. 👉🏻 L1과 L2캐시는 CPU내부, L3는 CPU외부에 위치함. 🤔질문 | 왜 컴퓨터는 0과1로만 표현? 다른 숫자는 NO?1. 전기 신호의 단순성컴퓨터는 전기 신호로 작동함전기 신호는 두 가지 상태, 즉 켜짐(ON)과 꺼짐(OFF) 로 표현하는 게 가장 간단하고 안정적.0은 "전기 꺼짐(낮은 전압)", 1은 "전기 켜짐(높은 전압)"으로 매핑.2. 신뢰성과 오류 최소화0과 1 두 가지 상태만 다루면 신호를 구분하기 쉬움.예를 들어, 0은 0V, 1은 5V로 설정하면 중간 값(예: 2.5V)이 애매하게 혼동될 가능성이 적다.만약 0~9(십진수)를 직접 사용하려면, 전압을 10단계로 나눠야 함(예: 0V, 0.5V, 1V, ..., 4.5V) 이건 하드웨어가 복잡해지고, 작은 전압 차이로 오류가 생길 확률이 높아짐.3. 효율적인 데이터 표현0과 1의 조합으로 모든 데이터를 표현할 수 있다.숫자, 문자, 이미지, 심지어 소리까지 이진수로 변환 가능!예: 문자 'A'는 ASCII 코드로 01000001(8비트). 숫자 5는 00000101.이진수로 모든 걸 표현할 수 있으니 다른 숫자 체계(예: 0~9)를 굳이 쓸 필요가 없다.  자료구조 알고리즘 회고재귀로 순회하는 로직을 알겠으나,생성자를 통해 노드를 생성하고, 서브트리를 만들어서 기능 설정하는 부분이 익숙하지 않아서 어려웠다.추후, 이번 강의에 대한 <기본편> 학습이 더욱 필요하다는 것을 깨달았다. 3⃣미션 해결 미션 제출 링크불대수 방정식을 활용하여, 간단하게 식을 정리하는 법이 재미있었다. 증명하는 과정이 흥미로웠다. 강의에서 배운 내용 ( 법칙들 ) 적용해가며 식을 스스로 증명하는게 재미있었다 그러나 자료구조와 알고리즘 문제는 <기본편> 학습이 제대로 되지 않은 상태에서 <심화편> 수업과 미션을 수행하려니 너무 어렵고 버거웠다. 그래서 자료구조 알고리즘 미션은 공란으로 제출해버렸다 .... 해당 미션은 차주에 <기본편>학습을 하며 미션을 해결할 예정이다.   4⃣학습일지 컴퓨터 구조 자료구조와 알고리즘  

컴퓨터 구조감자자료구조워밍업클럽발자국컴퓨터구조

채널톡 아이콘