블로그
전체 9#카테고리
- 커리어 · 자기계발 기타
- 알고리즘 · 자료구조
- 시스템 · 운영체제
#태그
- 워밍업클럽
2025. 03. 21.
1
[인프런 워밍업 클럽 3기 - CS] 3주차 발자국
강의 수강학습 내용 요약그림으로 쉽게 배우는 운영체제 강의 - 완강그림으로 쉽게 배우는 자료구조와 알고리즘 - 완강학습 내용 회고후반부로 갈 수록 모르던 내용이 많아서 이해하기 위해 노력했다.동적 프로그래밍이나 알고리즘은 꾸준히 복습이 필요할 것 같다.미션해결 과정 요약미션 질문을 읽고, 바로 떠오르지 않는 내용은 강의를 다시 보며 복습하고 정리하여 작성했다.정답이 어느 정도 정해져 있더라도 조금 더 내 생각을 곱씹어 보며 미션을 수행했다.미션 해결 회고원리는 이해했는데 용어가 잘 안 외워지고 설명이 어려워서 조금 더 연습이 필요할 것 같다.개념을 정리하는 데에 조금 더 집중했던 것 같다.
커리어 · 자기계발 기타
・
워밍업클럽
2025. 03. 21.
0
[인프런 워밍업 클럽 3기 - CS] 3주차 자료구조와 알고리즘 미션
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블정렬장점 : 구현이 간단하다.단점 : 성능이 좋지 않다.시간 복잡도 : O(n²)선택정렬장점 : 구현이 간단하다.단점 : 성능이 좋지 않다.시간 복잡도 : O(n²)삽입정렬장점 : 구현이 간단하다.단점 : 성능이 좋지 않다.시간 복잡도 : O(n²)병합정렬장점 : 성능이 좋다.단점 : 구현이 복잡하다.시간 복잡도 : O(nlogn)퀵정렬장점 : 성능이 좋다. 또한 단점 : 구현이 복잡하다. 시간 복잡도 : Θ(nlogn), O(n²) (대부분 좋은 피벗을 선택하고 최악의 경우가 발생할 경우가 극히 낮아서 병합정렬에 비해 더 적은 비교와 더 적은 메모리 공간을 차지하여 더 좋은 알고리즘으로 평가된다.) 2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.메모이제이션을 사용하여 재귀로 쉽게 구현은 가능할 수 있지만, 결국 메모리가 부족하여 시스템에서 문제가 발생할 우려가 있으므로 구현이 조금 복잡할 수 있더라도 조금 더 메모리를 효율적으로 사용할 수 있는 타뷸레이션을 이용할 것 같다.
알고리즘 · 자료구조
・
워밍업클럽
2025. 03. 21.
0
[인프런 워밍업 클럽 3기 - CS] 3주차 운영체제 미션
1. 메모리의 종류는 어떤 것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터 : 가장 빠른 기억장소로 CPU 내에 존재한다. 컴퓨터의 전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.캐시 : 메인 메모리에 있는 데이터를 레지스터로 옮기는 시간이 오래 걸리므로, 필요할 것 같은 데이터를 저장해둔다. 캐시는 성능 상의 이유로 여러 개를 둔다. 컴퓨터의 전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.메인 메모리 : 실제 운영체제와 다른 프로세스들이 올라가는 공간. 하드디스크나 SSD보다 속도는 빠르지만 비싸기 때문에 실행중인 프로그램만 올린다. 컴퓨터의 전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.보조저장장치(HDD, SSD) : 속도가 느리고 용량이 크고 가격이 저렴하다. 컴퓨터의 전원이 꺼져도 데이터가 사라지지 않는 비휘발성 메모리이다. 2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터. 메모리 관리자가 사용자 프로세스가 경계 레지스터의값을 벗어났는지 검사하고 만약 벗어났다면 종료시킨다. 3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식장점 : 메모리의 연속된 공간에 할당되기 때문에 더 크게 할당되어 낭비되는 공간인 "내부 단편화"가 없다.단점 : 메모리의 빈 공간이 연속적으로 존재하지 않게 되는 "외부 단편화"가 발생한다.고정 분할 방식장점 : 구현이 간단하고 오버헤드가 적다.단점 : 작은 프로세스도 큰 영역에 할당되어 "내부 단편화"가 발생한다. 4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱 5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?말 그대로 "컴퓨터를 실행"시키는 것이라면 운영체제 설치 없이도 전원이 들어오고 바이오스 진입까지는 가능하기 때문에 아니라고 볼 수 있으나, 현실적으로는 운영체제를 설치해야 하여 필수적이라고 보는 게 타당한 것 같다. 6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일을 삭제할 때 파일시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더만 삭제하고 사용했던 블록의 데이터는 그대로 남아있기 때문에 복구가 가능하다.
시스템 · 운영체제
・
워밍업클럽
2025. 03. 13.
0
[인프런 워밍업 클럽 3기 - CS] 2주차 발자국
강의 수강학습 내용 요약그림으로 쉽게 배우는 운영체제 강의 - 섹션 7까지 완강그림으로 쉽게 배우는 자료구조와 알고리즘 - 섹션 3 유닛 5까지 완강학습 내용 회고알고 있었던 내용들은 복습할 수 있었고, 디테일하게 잘 몰랐던 MLFQ나 은행원 알고리즘 등에 대해서는 새로 학습할 수 있었다.대부분 알고 있었던 자료 구조에 대해 복습하고 다시금 익히는 계기가 되었다. 미션해결 과정 요약미션 질문을 읽고, 바로 떠오르지 않는 내용은 강의를 다시 보며 복습하고 정리하여 작성했다.알고리즘 구현은 여러 가지 방안으로 테스트해 보면서 미션에 가장 깔끔한 방향이라고 생각되는 방향으로 구현했다.미션 해결 회고운영체제 관련 내용은 항상 개념은 이해하고 있어도 명확하게 설명하기는 어려운 것 같아서 어느 정도는 정리된 표현을 암기하는 것도 필요한 것 같다.알고리즘 구현은 난이도가 상당히 쉬운 미션이었다고 생각한다.
커리어 · 자기계발 기타
・
워밍업클럽
2025. 03. 13.
0
[인프런 워밍업 클럽 3기 - CS] 2주차 자료구조와 알고리즘 미션
1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?콜스택이 계속 쌓여서 메모리가 부족해져서 프로세스가 비정상 종료될 수 있다. 2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n) { if (n % 2 === 0) return sumOdd(n - 1); if (n === 1) return 1; return sumOdd(n - 2) + n; } 3. 다음 코드는 매개변수로 주어진 파일 경로(.는 현재 디렉토리)에 있는 하위 모든 파일과 디렉토리를 출력하는 코드입니다. 다음 코드를 재귀 함수를 이용하는 코드로 변경해보세요.const fs = require("fs"); // 파일을 이용하는 모듈 const path = require("path"); // 폴더와 파일의 경로를 지정해주는 모듈 function traverseDirectory1(directory) { const files = fs.readdirSync(directory); // 인자로 주어진 경로의 디렉토리에 있는 파일or디렉토리들 for (const file of files) { // 현재 디렉토리의 모든 파일or디렉토리 순회 const filePath = path.join(directory, file); // directory와 file을 하나의 경로로 합쳐줌 const fileStatus = fs.statSync(filePath); // 파일정보 얻기 if (fileStatus.isDirectory()) { // 해당 파일이 디렉토리라면 console.log('디렉토리:', filePath); traverseDirectory1(filePath); } else { // 해당 파일이 파일이라면 console.log('파일:', filePath); } } }
알고리즘 · 자료구조
・
워밍업클럽
2025. 03. 13.
0
[인프런 워밍업 클럽 3기 - CS] 2주차 운영체제 미션
1. FIFO 스케줄링의 장단점이 뭔가요?장점 : 먼저 도착하고 프로세스가 먼저 실행되고 끝나는 알고리즘으로, 단순하고 직관적이다.단점 : 한 프로세스가 완전히 끝나야 다음 프로세스가 시작되기 때문에, 실행 시간이 짧고 늦게 도착한 프로세스가 실행 시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다. 또한 I/O 작업이 있다면 CPU는 I/O 작업이 끝날 때까지 쉬고 있기 때문에 CPU 사용률이 떨어진다. 2. SJF를 사용하기 어러운 이유가 뭔가요?어떤 프로세스가 얼마나 실행될 지 예측하기 어렵다.실행 시간이 짧은 프로세스를 먼저 실행하므로, 실행 시간이 긴 프로세스가 먼저 도착했더라도 짧은 프로세스가 중간에 계속 들어오면 실행 시간이 긴 프로세스는 계속 실행하지 못하게 된다. 3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?컨텍스트 스위칭이 너무 자주 일어나게 되어 오버헤드가 너무 커지고 성능이 저하된다. 4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하면 CPU 사용이 적은 것이므로 I/O Bound Process라고 취급한다.반대로 타임 슬라이스 크기를 오버하여 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU Bound Process라고 취급한다. 5. 공유자원이란 무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일 등의 자원. 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야 할까요?상호 배제 : 어떤 프로세스가 한 리소스를 점유했다면 해당 리소스는 다른 프로세스에게 공유되면 안된다.비선점 : 어떤 프로세스가 한 리소스를 점유했다면 다른 프로세스가 해당 리소스를 빼앗을 수 없다.점유와 대기 : 어떤 프로세스가 한 리소스를 점유한 상태에서 다른 리소스를 원하는 상태.원형 대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이룬 상태.
시스템 · 운영체제
・
워밍업클럽
2025. 03. 09.
0
[인프런 워밍업 클럽 3기 - CS] 1주차 발자국
강의 수강학습 내용 요약그림으로 쉽게 배우는 운영체제 강의 - 섹션 3까지 완강그림으로 쉽게 배우는 자료구조와 알고리즘 - 섹션 2까지 완강학습 내용 회고대부분은 어느 정도 아는 내용이었지만 그래도 강의를 잘 들으며 복습 차원으로 다시 한 번 정리하는 계기가 되었다.자료 구조의 세부 구현까지 조금 더 고민해보고, PCB나 부팅 과정 등 몰랐던 개념들은 배울 수 있는 시간이었다. 미션해결 과정 요약미션 질문을 읽고, 바로 떠오르지 않는 내용은 강의를 다시 보며 복습했다.나름대로 정리된 내용들을 바탕으로 미션을 수행했다. 미션 해결 회고운영체제 관련 내용은 대부분 개념은 알지만 명확하게 설명하기가 어려워서, 천천히 다시 복습할 수 있는 계기가 되었다.자료구조와 알고리즘 관련 내용은 대부분 이해하고 있는 내용들이었고, 코드 구현이 어렵지 않아서 수월하게 미션을 수행했다.
커리어 · 자기계발 기타
・
워밍업클럽
2025. 03. 09.
0
[인프런 워밍업 클럽 3기 - CS] 1주차 자료구조와 알고리즘 미션
1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.해시 테이블 자료구조를 사용할 것 같다.학생의 번호를 key로 두고 관리하면 특정 학생을 번호만 가지고 O(1)의 성능으로 조회하고 정보를 업데이트하는 등으로 관리가 수월할 것 같다. 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐 자료구조를 사용할 것 같다.먼저 들어온 주문은 먼저 처리되어야 하므로, 기본적으로 FIFO로 동작하는 큐 자료구조가 적합하다. 3. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.import {DoublyLinkedList} from "./DoublyLinkedList.mjs"; class Stack { constructor() { this.list = new DoublyLinkedList(); } push(data) { this.list.insertLast(data); } pop() { try { return this.list.deleteLast(); } catch (e) { return null; } } peek() { return this.list.getNodeAt(this.list.count - 1); } isEmpty() { return (this.list.count === 0); } } export {Stack} 4. 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.hashFunction(name) { let charCode = 0; for (let i = 0; i
알고리즘 · 자료구조
・
워밍업클럽
2025. 03. 09.
0
[인프런 워밍업 클럽 3기 - CS] 1주차 운영체제 미션
while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }1. 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?폴링방식 대신 인터럽트를 이용해야 한다.ex) skill의 상태가 Activate로 변경되는 경우 인터럽트를 발생시키고, 해당 신호를 받아서 작업을 완료. 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램 : 하드디스크 등과 같은 저장장치에 저장된 명령문의 집합체.프로세스 : 실행중인 프로그램. 즉 하드디스크에 저장된 프로그램이 메모리에 올라갔을 때 프로세스라고 불린다. 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍 : 메모리에 여러 개의 프로세스를 올려서 처리하는 방식. CPU가 프로세스를 처리하다가 I/O 작업을 만나면 해당 프로세스에서 발생한 I/O 작업은 기다리면서 다른 프로세스를 실행한다.멀티프로세싱 : 모든 프로세스들을 짧게 번갈아 실행시키면서 동시에 실행되는 것처럼 느껴지게 하는 방식을 멀티태스킹이라고 부른다. 여기서 CPU를 여러 개 이용할 수 있는데, CPU가 여러 개 있다면 이를 멀티프로세서라고 부른다. 이 때 멀티프로세서로 작업을 처리하는 것을 멀티프로세싱이라고 부른다. 4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장한다. PCB에는 프로세스의 여러 정보가 저장되어 있고, 이러한 정보를 통해 운영체제가 시분할 처리 등을 문제없이 수행할 수 있다. 5. 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭이란 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업이다.
시스템 · 운영체제
・
워밍업클럽