블로그
전체 62024. 10. 20.
1
인프런 워밍업 클럽 CS 2기 - 3주차 발자국
지난 일주일 동안의 강의 목차입니다.자료구조와 알고리즘정렬 - 삽입, 병합, 퀵정렬동적 프로그래밍 - 메모이제이션, 타뷸레이션운영체제가상메모리입출력장치파일 시스템회고잘한 점주말에라도 몰아서 들었다.아쉬운 점개인적인 프로젝트를 준비하느라 강의를 일정에 따라 듣지 못했다. 추후에 다시 복습하면서 공부해야겠다. 목표복습하지 못한 강의 복습이해하지 못한 내용은 이해할 수 있게 개념을 다시 찾아보기미션(https://inf.run/4yPTR)미션을 해결한 과정지난 한 주 동안 배운 내용을 복기하여 해결했다.회고개인적인 프로젝트를 준비하느라 강의를 일정에 따라 듣지 못해 미션을 해결하기 위해 강의를 들었다. 강의를 듣고 공부한 내용을 토대로 미션을 푸는 게 공부하는 데 더 도움이 되지만, 주객이 전도되어 아쉽다. 시간이 나면 강의와 미션 내용을 다시 정리해야겠다.
2024. 10. 20.
1
인프런 워밍업 클럽 CS 2기 - 3주차 미션
운영체제1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터휘발성 메모리컴퓨터의 bit = 레지스터의 크기메인메모리의 값을 가져와서 레지스터에서 연산하고 메인메모리로 저장캐시레지스터와 메인메모리 속도 차이 때문에 미리 데이터를 가져다 놓는 곳 메인메모리(RAM) 휘발성 메모리실제 운영체제와 다른 프로세스들이 올라오는 공간가격이 비쌈보조저장장치(HDD / SSD) 비휘발성 메모리파일 저장 공간2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터(Boundary Register): 주기억 장치(RAM)내에 존재하는 프로그램은 크게 운영체제와 사용자 영역으로 나뉜다. 사용자가 영역에 존재하는 OS영역에 침범하거나, 프로세스 경계를 벗어났다면 강제로 종료시킴3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식프로세스가 크다면, 메모리도 크게 할당 장점: '내부 단편화(연속된 공간에 할당되므로, 더 크게 할당되어 낭비되는 공간)'가 없음 단점: '외부단편화(공간이 남는데 연속된 공간이 아니라 할당 할 수 없는 현상)' 발생고정 분할 방식일정 크기로 나누고, 프로세스 크기와 상관없이 메모리 할당 장점: 구현이 간단하며, 오버헤드가 적음 단점: 크기보다 더 할당되는 '내부 단편화'가 발생4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요. 운영체제(OS)와 소프트웨어, 그리고 데이터를 저장하고 실행할 수 있도록 해 주기 때문에 실질적인 컴퓨터 사용을 위해선 꼭 필요하다. 6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일시스템의 효율적인 관리를 위해 빈 공간에 모아둔 free block List가 있다. 특정 파일을 삭제하면 파일시스템은 파일테이블의 헤더를 삭제하고 free block list를 추가하는데, 이렇게 삭제된 위치는 사용자로 하여금 삭제된 것처럼 보인다.실제로는 물리적 디스크에 그대로 남아 있으므로 복구할 수 있다.자료구조와 알고리즘1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬 장점: 이해와 구현이 쉽다.단점: 성능이 좋지 않다.시간 복잡도: O(n²)선택정렬 장점: 이해와 구현이 쉽다.단점: 성능이 좋지 않다.시간 복잡도: O(n²)삽입정렬 장점: 이해와 구현이 쉽다.단점: 성능이 좋지 않다.시간 복잡도: O(n²)병합정렬 장점: 성능이 좋다.단점: 정렬 배열을 저장한 메모리 공간 필요하다.시간 복잡도: O(n log n)퀵정렬 장점: 성능이 좋다.단점: 피벗설정을 잘못할 경우 O(n²)의 성능이 될 수 있다. 저장할 공간이 추가로 필요하다.시간 복잡도: O(n log n)2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.- 메모이제이션 (Memoization)방식: 재귀 호출 과정에서 계산된 값을 메모리에 저장하고, 동일한 계산이 필요할 때 저장된 값을 재사용하는 방식이다. 즉, 하향식(Top-Down) 접근법으로, 문제를 재귀적으로 나누면서 필요할 때마다 계산을 수행한다.장점재귀적인 접근이기 때문에 구현이 직관적이며, 복잡한 문제를 분할하여 풀기 좋다.필요한 부분만 계산해서 저장하므로, 일부 입력값에 대해서만 최적화된 결과를 저장할 수 있다.단점각 재귀 호출마다 스택을 사용하므로, 호출 깊이가 깊어지면 스택 오버플로우가 발생할 수 있다.메모리를 적게 사용하려는 상황에서 재귀 호출의 오버헤드와 캐싱을 위한 메모리 사용이 부담이 될 수 있다.- 타뷸레이션 (Tabulation)방식: 작은 문제부터 차례대로 해결하면서, 테이블에 저장된 값을 이용해 큰 문제를 푸는 방식이다. 이는 상향식(Bottom-Up) 접근법으로, 배열을 사용해 반복적으로 값을 계산해 나가는 방식이다.장점반복적인 접근 방식을 사용하기 때문에 스택 오버플로우의 위험이 없다.재귀 호출이 없어 호출 스택을 줄일 수 있어 메모리 사용을 최적화할 수 있다.단점모든 경우를 계산해서 테이블에 저장하므로, 메모리 사용량이 많을 수 있다.문제를 작은 부분으로 분해하여 해결하는 과정이 덜 직관적일 수 있다.이에 따라, 메모리가 부족한 시스템에서 안정성을 고려한다면, 타뷸레이션을 선택하겠다.
알고리즘 · 자료구조
・
워밍업클럽
・
미션
2024. 10. 13.
1
인프런 워밍업 클럽 CS 2기 - 2주차 발자국
지난 일주일 동안의 강의 내용 중 일부를 발췌했습니다. 자세한 내용은 개인 노션 페이지에 타이핑했습니다.자료구조와 알고리즘재귀(Recursion): 어떠한 것을 정의할 때 자기 자신을 참조하는 것재귀함수: 함수 정의 내에 같은 이름의 함수가 올 때 이를 재귀함수라 한다.반드시 탈출 조건(기저조건)이 있어야 한다.콜스택: 함수가 호출되면서 올라가는 메모리 영역으로, 스택이라고도 부른다. 운영체제운영체제가 중간에서 CPU를 할당해주는 것을 CPU 스케줄링이라 부른다.CPU 스케줄링은 공평함과 성능 문제 때문에 프로세서들에게 일정시간, 즉 타임슬라이스만큼 CPU를 할당하기로 했다.이 때문에 공유된 자원에서 문제가 발생하고 이를 동기화 문제라고 부르기로 했다.이를 해결하기 위한 방법인 세마포어와 모니터를 배웠다. 동기화 문제를 해결하기 위해 공유된 자원을 한 프로세스가 점유하게 만들었으나 교착상태(데드락)라는 것이 발생했습니다.교착상태가 발생하는 원인과 해결 방법을 알아봤다.회고잘한 점강의 계획 일정에 따라 밀리지 않고 들었다. 처음 알게되었던 내용을 알 수 있어서 좋았다.아쉬운 점나름대로 정리한 강의 내용이 다시 복습할 때는 글로만 적어서 이해하는데 약간 시간이 걸렸다. 강의 캡처 기능을 이용하여 그림으로 설명해 주는 것도 함께 볼 수 있도록 정리해야겠다.목표꾸준히 강의 듣고 학습하기 이전에 배웠던 내용도 꾸준히 복습하기정리할 때 캡처 기능도 활용하기미션(https://inf.run/W9XSk)미션을 해결한 과정지난 한 주 동안 배운 내용을 복기하여 해결했다. 회고노션에 정리한 내용으로 풀었는데 정리한 내용을 다시 볼 때 이해하기 어려웠던 내용이 있었다. 다음부터는 강의를 들을 때 좀 더 자세하게 정리해야겠다.
발자국
・
워밍업클럽
・
CS
2024. 10. 13.
1
인프런 워밍업 클럽 CS 2기 - 2주차 미션
운영체제 1. FIFO 스케줄링의 장단점이 뭔가요?FIFO = 먼저 들어온 작업이 먼저 나간다는 뜻FIFO 스케줄링: 스케줄링 큐에 들어온 순서대로 CPU를 할당받는 방식장점: 단순하고 직관적인 알고리즘단점: 한 프로세스가 완전히 끝나야 다음 프로세스가 실행되기 때문에, 실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다.2. SJF를 사용하기 여러운 이유가 뭔가요?SJF = Shortest Job FirstFIFO(First in First Out)에서 Burst Time이 짧은 프로세스를 먼저 실행했을 때 평균 대기 시간이 짧아진 것에서 아이디어를 얻음이론적으로는 FIFO보다 성능이 좋으나, 실제 구현 시 문제가 발생함어떤 프로세스가 얼마나 실행될지 예측하기 힘들다.Burst Time이 긴 프로세스는 아주 오랫동안 실행되지 않을 수도 있다.3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?타임슬라이스가 너무 짧으면 CPU 스위칭이 빈번하게 일어나 오버헤드가 발생할 수 있다.4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU Bound Process: CPU를 사용하는 프로세스가 실행하다가 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 경우, CPU 사용률이 높음I/O Bound Process: CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하는 경우, CPU 사용률이 낮음 5. 공유자원이란 무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일들여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질 수 있다.6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?교착상태(데드락): 여러 프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무도 작업을 진행하지 못하는 상태상호배제: 어떤 프로세스가 한 리소스를 점유했다면, 그 리소스는 다른 프로세스에게 공유가 되면 안된다.비선점: 프로세스 A가 리소스를 점유하고 있는데, 프로세스 B가 리소스를 빼앗을 수 없어야 한다.점유와 대기: 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야 한다.원형 대기: 점유와 대기를 하고 있는 프로세스가 원형을 이루고 있어야 한다.자료구조와 알고리즘 1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?기저 조건: 재귀 함수를 멈추는 조건기저조건을 만들지 않거나 잘못 설정하면 무한 루프가 발생하여 스택 오버플로우가 발생할 수 있다.2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.Pythondef sum_odd_numbers(n): if n
알고리즘 · 자료구조
・
워밍업클럽
・
미션
2024. 10. 05.
1
인프런 워밍업 클럽 CS 2기 - 1주차 발자국
지난 일주일 동안의 강의 내용 중 일부를 발췌했습니다. 자세한 내용은 개인 노션 페이지에 타이핑했습니다.자료구조와 알고리즘자료구조: 데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타냄 예시: 변수, 배열알고리즘: 어떤 문제를 해결하기 위한 확실한 방법자료구조에 따라 알고리즘이 달라짐. 즉, 자료구조에 많은 영향을 받음같은 자료구조더라도 여러 알고리즘이 있을 수 있음시간 복잡도: 특정 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간특정 알고리즘의 성능을 평가할 때는 해당 알고리즘의 반복문을 보고 성능을 평가스택: First In Last Out(FILO): 먼저 들어간 데이터가 나중에 나온다.큐: First In First Out(FILO): 먼저 들어간 데이터가 먼저 나온다.덱: 데이터의 삽입과 제거를 head와 tail 두 군데서 자유롭게 할 수 있는 자료구조스택은 head에서만 처리할 수 있고, 큐는 head에서 삽입, tail에서 제거한다.해시테이블: 해시와 테이블이 합쳐진 자료구조테이블의 메모리를 적게 차지하고, 충돌이 덜 일어나도록 데이터를 골고루 분배시키는 좋은 해시 함수의 구현이 필수적운영체제커널프로세스와 메모리, 저장 장치를 관리하는 핵심적인 기능을 담당사용자는 커널에 직접 접근할 수 없으며, GUI/CLI를 통해 접근함 CPU를 구성하는 장치산술 논리 연산 장치: CPU에서 실제로 데이터 연산을 담당하는 장치제어 장치: 모든 장치들의 동작을 지시하고 제어하는 장치레지스터: CPU 내에서 계산을 위해 임시로 보관하는 장치메모리 종류램(RAM): 랜덤으로 데이터를 읽어도 저장된 위치와 상관없이 읽는 속도가 같음. 전력이 끊기면 데이터를 잃어버리기 때문에 메인 메모리로 사용롬(ROM): 전력이 끊겨도 데이터를 계속 보관할 수 있지만, 데이터를 한번 쓰면 수정할 수 없으므로, 컴퓨터의 부팅과 관련된 바이오스를 저장하는데 주로 사용멀티프로그래밍메모리에 여러 개의 프로세스가 올라온 것 멀티프로세싱유니프로그래밍, 멀티프로그래밍을 메모리 관점에서 정의했다면, 멀티프로세싱은 CPU 관점으로 정의한 것CPU가 여러 개의 프로세스를 처리하는 것컨텍스트 스위칭프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태 값으로 교체하는 작업컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경된다.FIFO(First In First Out)먼저 들어온 작업이 먼저 나간다는 뜻으로, 스케줄링 큐에 들어온 순서대로 CPU를 할당받는 방식먼저 들어온 프로세스가 완전히 끝나야만 다음 프로세스가 실행될 수 있다.회고잘한 점강의 계획 일정에 따라 밀리지 않고 들었다. 애매했던 개념을 잘 정리할 수 있어서 좋았다.아쉬운 점정해진 일정의 강의만 생각하다보니 생각의 유연함이나 확장이 부족했다. 주말 동안에 시간을 내서 보충했는데, 평일에 강의를 들으면서 조금만 더 시간을 투자하면 주말엔 다른 공부나 휴식하는 데 쓸 수 있을 듯하다. 목표꾸준히 강의 듣고 학습하기강의를 보면서 타이핑한 내용을 한 번만 보는 게 아니라 두 세번 보면서 이해하기이전에 배웠던 내용도 꾸준히 복습하기미션(https://inf.run/yyYhZ)미션을 해결한 과정한 주 동안의 강의 내용을 정리한 것을 보면서 미션을 해결했다. 강의에서는 나오지 않았지만, 비슷한 예시는 해당 강의를 다시 보면서 힌트를 얻었다. 회고강의와 똑같은 내용이 미션에 나오기보다, 비슷한 유형을 낸 미션이었다. 처음 만났을 땐 막막했지만, 강의 내용을 되새겨보면서 힌트를 얻을 수 있었고, 해결했다. 이후 미션에 어떤 문제가 나올지 모르겠지만, 최대한 적용할 수 있도록 강의를 한 번 보고 끝내는 게 아니라 이해할 수 있도록 노력해야겠다.
발자국
・
워밍업클럽
・
cs
2024. 10. 02.
1
인프런 워밍업 클럽 CS 2기 - 1주차 미션
운영체제1.위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?-> 폴링방식의 단점을 해결한 인터럽트 방식을 사용한다. 인터럽트는 입출력 관리자에게 입출력 명령을 내리는 것까지는 폴링 방식과 같지만, 명령을 내린 후에 CPU가 다른 작업을 계속한다. 이에 따라, 인터럽트는 비동기적으로 동작하므로 성능에 이점이 있다. 2. 프로그램과 프로세스가 어떻게 다른가요?-> 프로그램은 하드디스크와 같은 저장 장치에 저장된 명령문의 집합체이며, 프로세스는 실행 중인 프로그램이다.-> 프로세스는 메모리도 사용하고, 운영체제의 CPU스케줄링 알고리즘에 따라서 CPU도 사용하며, 필요에 따라 입력과 출력을 하기 때문에 능동적이지만, 프로그램은 하드디스크(저장 장치)만 사용하므로 수동적이다. 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?-> 멀티프로그래밍: 메모리에 여러 개의 프로세스가 올라온 것-> 멀티프로세싱: CPU가 여러 개의 프로세스를 처리하는 것 4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?-> PCB(Process Control Block) 5. 컨텍스트 스위칭이란 뭔가요?-> 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태 값으로 교체하는 작업자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.-> 학생 수가 적으면 배열을 사용한다. 다만, 학생의 수가 많거나 변동될 경우가 있다면 배열보다는 해시테이블을 사용한다. 해시테이블은 키(key)와 밸류(value)로 구성되어 있고, 키(key)만 알면 밸류(value)에 O(1) 성능으로 읽을 수 있다. 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.-> 주문이 들어온 순서대로 처리하려면 큐를 선택한다. 큐는 선입선출(FIFO: First In First Out) 구조이므로, 들어온 순서대로 처리되어 적합하다.
알고리즘 · 자료구조
・
워밍업클럽
・
미션