블로그

빠타박스

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

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

컴퓨터 구조인프런워밍업클럽스터디모임감자빠타박스언리얼엔진CS지식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
채널톡 아이콘