블로그
전체 9#태그
- 인프런워밍업클럽3기
- CS
- 3주차
- 발자국
- 미션
- 운영체제
- 자료구조와알고리즘
- 2주차
- 1주차
2025. 03. 23.
1
[인프런 워밍업 클럽 3기] CS - 3주차 발자국
강의 수강공룡책과 함께 병행하며, Chapter 별 정리 진행 중이다.사실 글로만 보면 이해하기 어려운게 당연하다. (다회독한 공룡책이지만, 여전히 어렵다.)그래서인지 영상을 보고 이해가 점점 되는게 신기하고 재미있다.3주간의 진행은 끝나지만, 영상 + 책을 병행하며 지속적으로 학습할 예정이다.좋은 강의 만들어주신 멘토 "감자" 님 감사합니다 ~미션자료구조와 알고리즘 https://inf.run/3XCrK 운영체제 https://inf.run/4usVo
인프런워밍업클럽3기
・
CS
・
3주차
・
발자국
2025. 03. 23.
0
[인프런 워밍업 클럽 3기] CS - 3주차 미션 (운영체제)
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터가장 빠른 기억장소로 CPU 내에 존재컴퓨터의 전원이 꺼지면 데이터가 사리지므로, 휘발성 메모리에 해당메인메모리 RAM레지스터에 비하면 한참 느린 메모리휘발성 메모리실제 운영체제와 다른 프로세스들이 올라가는 공간하드디스크나 SSD 보다 속도는 빠르지만 가격이 비쌈데이터를 저장하기 보다는 실행 중인 프로그램만 올림캐시메인메모리에 있는 값을 레지스터로 옮기려면 시간이 한참 걸림이때, 미리 가져와서 저장하는 공간이 필요한데 캐시가 이에 해당휘발성 메모리성능의 이유로 여러개를 둠 (L1, L2, … )보조저장장치 (HDD, SSD 등)비휘발성 메모리사무용 프로그램이나 게임, 작업한 파일을 저장하는 공간가격이 메인 메모리에 비하면 매우 저렴함 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터하드웨어적으로 운영체제 공간과 사용자 공간을 나누는 레지스터에 해당CPU 내에 존재하며, 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고, 만약 벗어났다면 그 프로세스를 종료시킴 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식 - 세그멘테이션장점 : 메모리를 가변적으로 분할할 수 있고, 코드영역, 데이터 영역, 스택 영역, 힙 영역을 모듈로 처리할 수 있기 때문에 공유와 각 영역에 대한 메모리 접근보호가 편리단점 : 외부 단편화가 발생 외부 단편화?프로세스들이 메모리에 적재되고 제거될 때 할당되지 않고 작은 조각들로 메모리가 나뉘어져 있는 상태 외부 단편화 해결책메모리의 내용을 한쪽으로 밀어서 큰 공간을 만드는 방법 : 밀집→ 시간 낭비가 심함요구되는 메모리 크기보다 더 크게 할당→ 이때, 할당 했지만 안쓰는 공간을 내부 단편이라고 함 고정 분할 방식 - 페이징장점 : 모든 페이지의 크기가 동일해서 세그멘테이션과 다르게 크기를 표현하는 Bound Address가 필요하지 않으며, 이러한 특징떄문에 외부 단편화가 발생하지 않음. 메모리를 효율적으로 관리할 수 있음.단점 : 하지만, 정해진 크기의 페이지보다 프로세스의 정보가 작으면 공간이 낭비, 이를 내부 단편화라고 부름.세그멘테이션과 비교하면 많은 공간을 낭비하는 것은 아니므로 심각하게 생각하지 않음.페이지로 나누기 때문에 논리적인 영역을 나눌 수 없음. 그래서 특정 영역에 대해서 공유하거나 권한을 부여하는 것이 어려움. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱 Thrashing스레싱의 원인OS는 CPU의 이용률이 낮아지면 다중 프로그래밍 정도를 높임페이지 부재가 많아지고 이로 인한 페이지 교체가 과도하게 발생하여 시스템 성능이 저하 → 스레싱근본적인 원인은 물리 메모리의 크기가 작은것→ 하드웨어적으로 해결하려면 메모리의 크기를 늘리면 됨 HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.운영체제는 파일을 관리하기 위해 파일 관리자를 두고 파일 테이블을 이용해 파일을 관리한다.이때, 파일을 저장 하기 위한 저장장치(HDD, SSD)는 반드시 필요 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?디스크에 파일을 저장할 때마다 빈 공간을 찾으려 모든 공간을 뒤지는 방식은 비효율적이므로, 파일 시스템은 효율적인 관리를 위해 빈 공간을 모아둔 free block list 를 가지고 있다.만약 파일을 삭제한다면 파일 시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고 사용했던 블록을 free block list 에 추가하는 방식으로 진행된다.이렇게 처리하면 사용자는 파일이 삭제된 것처럼 느껴지는데, 사용했던 블록의 데이터는 그대로 남아있기 때문에포렌식으로 데이터를 복구할 수 있음
인프런워밍업클럽3기
・
CS
・
3주차
・
미션
・
운영체제
2025. 03. 23.
0
[인프런 워밍업 클럽 3기] CS - 3주차 미션 (자료구조와 알고리즘)
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 선택 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 삽입 정렬시간 복잡도 : $O(n^2)$장점 : 이해와 구현이 간단.단점 : 성능이 좋지 않음. 병합 정렬시간 복잡도 : $O(nlogn)$장점 : 위 알고리즘들 보다 성능이 좋다.단점 : 재귀적인 기법으로 이해하기가 어렵고, 구현도 어려움 퀵 정렬시간 복잡도평균 : $\Theta(nlogn)$최악 : $O(n^2)$대부분의 경우 피벗을 중간값으로 설정하므로 배열을 매번 반으로 가를 수 있으므로 평균적인 성능을 가진다고 봄장점 : 병합 정렬보다 더 적은 비교와 더 적은 메모리 공간을 차지하므로, 병합 정렬보다 더 좋은 알고리즘으로 평가됨단점 : 재귀적인 기법으로 이해하기가 어렵고, 구현도 어려움 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요. 타뷸레이션을 선택. 메모이제이션은 재귀를 이용해 문제를 하향식으로 해결하며 복잡한 문제를 쉽게 해결할 수 있음.메모이제이션은 계산 결과를 저장하는 방식으로 단점을 해결하는데, 이때 메모리를 이용해 성능을 향상시킴그러므로, 메모리가 부족한 시스템에서는 메모이제이션을 사용하는것은 오버플로우가 발생할 수 있을것으로 예상됨. 즉, 상향식 접근인 타뷸레이션을 선택하여 메모리를 절약하고, 속도도 빠르게 해결하는 것이 좋아보임.
인프런워밍업클럽3기
・
CS
・
3주차
・
미션
・
자료구조와알고리즘
2025. 03. 16.
1
[인프런 워밍업 클럽 3기] CS - 2주차 발자국
강의 수강난이도는 점점 올라가지만, 그림을 통해 설명을 들으니 이해가 잘된다.운영체제의 경우, 공룡책과 함께 학습 중인데 글로 보고 난뒤 의문점이 생기는 부분들이 그림을 통해 해소되는 부분도 있어서 뿌듯하다. 중간 점검 간, 컴퓨터 구조 관련 강의 영상도 나온다고 전달받았는데, 기대가 된다.오늘 네트워크랑, 알고리즘 심화편도 구매해서 앞으로 완강까지 열심히 달려보려고 한다. 미션운영체제https://inf.run/APGrX자료구조와 알고리즘https://inf.run/GB1mb
인프런워밍업클럽3기
・
CS
・
2주차
・
발자국
2025. 03. 16.
0
[인프런 워밍업 클럽 3기] CS - 2주차 미션 (자료구조와 알고리즘)
재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?종료하는 코드(기저 조건 / 탈출 조건)을 만들지 않았으므로 (잘못 설정했을 경우에도), 콜스택이라는 메모리 공간이 가득차 자동으로 종료됨 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요. function sumOdd (n) { if (n == 1) { return 1; } if (n % 2 == 1) { return n + sumOdd(n - 1); } else { return sumOdd(n - 1); } } console.log(sumOdd(10)); 다음 코드는 매개변수로 주어진 파일 경로(.는 현재 디렉토리)에 있는 하위 모든 파일과 디렉토리를 출력하는 코드입니다. 다음 코드를 재귀 함수를 이용하는 코드로 변경해보세요. import fs from "node:fs"; import path from "node:path"; function traverseDirectory1(directory) { const files = fs.readdirSync(directory); for (const file of files) { // 현재 디렉토리의 모든 파일 or 디렉토리 순회 const filePath = path.join(directory, file); const fileStatus = fs.statSync(filePath); if (fileStatus.isDirectory()) { console.log("디렉토리:", filePath); traverseDirectory1(filePath); } else { console.log("파일:", filePath); } } } traverseDirectory1(".");
인프런워밍업클럽3기
・
CS
・
2주차
・
미션
・
자료구조와알고리즘
2025. 03. 16.
0
[인프런 워밍업 클럽 3기] CS - 2주차 미션 (운영체제)
FIFO 스케줄링의 장단점이 뭔가요?장점 : 단순하고 직관적임단점 : 한 프로세스가 완전히 끝나야 다음 프로세스가 시작되기 때문에 실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 한다는 것또한, IO 작업이 있다고 한다면 CPU는 IO 작업이 끝날 때까지 쉬고있기 때문에 CPU 사용률이 떨어짐 SJF를 사용하기 여러운 이유가 뭔가요?SJF은 Shortest Job First의 약어로 버스트 타임이 짧은 프로세스를 먼저 실행하는 것사용이 어려운 이유는 다음과 같음어떤 프로세스가 얼마나 실행될지 예측하기 힘듬프로세스의 종료 시간은 예측하기가 거의 불가능버스트 타임이 긴 프로세스는 아주 오랫동안 실행되지 않을 수 있음버스트 타임이 짧은 프로세스가 중간에 계속 들어오면 버스트 타임이 긴 프로세스는 앞의 모든 프로세스가 종료될 때까지 기다려야함 RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?문맥 교환 Context Switch 이 자주 발생하여 타임 슬라이스에서 실행되는 프로세스의 처리량보다 문맥 교환을 처리하는 양이 훨씬 커지게됨 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU를 사용하는 프로세스가 실행하다가, 스스로 CPU를 반납하면 CPU 사용이 적은것이니 I/O Bound Process 일 가능성이 높다 생각하고 I/O Bound Process 로 판단CPU를 사용하는 프로세스가 타임 슬라이스 크기를 오버해서 CPU 스캐줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU Bound Process 일 확률이 높다 생각하고 CPU Bound Process로 판단 공유자원이란무엇인가요?프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일 들을 공유자원이라고 함 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호 배제비선점점유와 대기원형 대기
인프런워밍업클럽3기
・
CS
・
2주차
・
미션
・
운영체제
2025. 03. 09.
0
[인프런 워밍업 클럽 3기] CS - 1주차 발자국
강의 수강강의를 수강하면서 운영체제, 자료구조 전반적인 복습을 할 수 있어서 좋았다.특히 복습의 의미로 이번 워밍업 클럽을 신청한거였는데 다회독을 진행하는 만큼 이해력이 조금씩 올라가는게 보여서 나름 뿌듯했다. 강좌에서 그림으로 설명해주는 부분들은 감동 모먼트들이 다수 있었다.. 앞으로도 열심히 수강해야겠다. 미션운영체제https://inf.run/c5mPY자료구조와 알고리즘https://inf.run/Vr1X9
인프런워밍업클럽3기
・
CS
・
1주차
・
발자국
2025. 03. 09.
0
[인프런 워밍업 클럽 3기] CS - 1주차 미션 (자료구조와 알고리즘)
여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.해시테이블을 사용해시 테이블은 Key Value로 구성되며, Key 값을 고유해야함교실의 학생들을 구별할 수 있는 고유한 정보가 존재하기 때문에, (예를 들면 학번)Key를 학번으로 하며, 학생 정보를 Value에 저장하면 됨이렇게 되면 고유한 값을 통해서 학생 정보를 쉽게 찾을 수 있을 것 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐 Queue 를 사용고객이 주문한 순서대로 처리되어야 하므로, FIFO를 만족하는 자료구조인 큐를 사용 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.import 한 LinkedList 의 프로퍼티에는 원소의 개수를 나타내는 count가 있다고 가정import { LinkedList } from "./linked.list.ts"; class Stack { list; constructor () { this.list = new LinkedList(); } push (data) { this.list.insertAt(this.list.count, data); } pop () { try { return this.list.deleteAt(this.list.count - 1); } catch (e) { return null; } } peek () { return this.list.getNodeAt(this.list.count - 1); } isEmpty () { return (this.list.count == 0); } } export { Stack }; 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요. ( 힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력)hashFunction(str) { let hash = 0; for (let i = 0; i 각 문자의 Unicode 값 더한 뒤, 테이블 크기로 나눈 나머지를 사용할 수 있음.하지만, 이름이 같거나, 구성이 같은 경우(이운재, 이재운)에는 충돌이 발생할 수 있으므로 추가적인 처리가 필요해보임
인프런워밍업클럽3기
・
CS
・
1주차
・
미션
・
자료구조와알고리즘
2025. 03. 09.
0
[인프런 워밍업 클럽 3기] CS - 1주차 미션 (운영체제)
while(true) { wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 } 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?스킬을 언제 사용했는지 알 수 없기 때문에 주기적으로 계속 체크하는 폴링 상황은 성능에 좋지 않음이때, 인터럽트 방식을 사용할 수 있음수업에서 예시로 설명되었던 입출력 관리자의 예시를 생각해보면, CPU는 입출력 관리자에게 명령을 내리고 CPU는 다른 일을 진행입출력 관리자는 입출력이 완료되었을 때 CPU에게 신호를 줌CPU는 그 신호를 받아 인터럽트 서비스 루틴을 실행시켜 작업을 완료하는 형식으로 처리문제와 결합하여 생각해보면, 인터럽트 신호를 플레이어가 스킬을 사용한 경우라고 볼고, 플레이어가 스킬을 사용하면 (인터럽트) 알리도록 설정하면됨 프로그램과 프로세스가 어떻게 다른가요?프로그램 : 하드디스크와 같은 저장장치에 저장된 명령문의 집합체.애플리케이션이나, 앱이라고 불리며 Windows 운영체제에서는 .exe 모양을 하고 있음컴퓨터 관점에서 하드디스크만 사용하는 수동적인 존재프로세스 : 실행중인 프로그램하드디스크에 저장된 프로그램이 메모리에 올라갔을 때 실행중인 프로그램을 프로세스라 함프로세스는 메모리도 사용하고, 운영체제의 CPU 알고리즘 스케줄 알고리즘에 따라서 CPU도 사용,필요에 따라 입력, 출력을 하기 때문에 능동적인 존재프로세스는 코드, 데이터 힙, 스택 영역으로 구성Code 영역은 자신을 실행하는 코드가 저장되어 있음Data 영역은 전역 변수와 정적 변수가 저장되어 있음Stack 영역에는 지역변수와 함수 호출을 했을 때 필요한 정보들이 저장됨Heap 영역은 프로그래머가 동적으로 메모리를 할당하는데 쓰임C언어를 예로 들면, malloc(), free() 함수를 호출하면 Heap 영역에 자원을 할당 / 해제할 수 있음 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 메모리에 여러 프로세스를 올려서 처리하는 방식CPU는 프로세스를 실행하다가 I/O 작업을 만나면 해당 프로세스에서 발생한 I/O 작업은 기다리면서 다른 프로세스를 실행 → CPU가 쉬는 시간이 줄어들며, 효율성이 올라감여기서 프로세스가 IO 작업이 있을 때만 다른 프로세스를 실행하는 것이 아닌,모든 프로세스를 짧게 실행하며 모든 프로세스를 동시에 실행시키는 것 처럼 느끼게 하는 기술을 멀티 태스킹이라고함이때, CPU가 하나가 아닌 여러 개를 사용하는 상황을 멀티프로세서라 부르며, 멀티프로세서로 작업을 처리하는 것을 멀티프로세싱이라고 함정리하면,멀티프로그래밍은 단일 CPU 관점에서 메모리에 여러 프로세스를 올려서 처리하는 방식이고,멀티프로세싱은 다중 CPU 관점에서 여러 프로세스가 짧게 실행되며 프로세스를 동시에 시키는 것처럼 느끼게 하는 상황 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?PCB Process Controll Block운영체제는 여러개의 프로세스를 전부 다 관리하고 공평하게 실행시켜야함운영체제는 프로세스가 만들어지면 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장PCB는 연결리스트 자료구조 형태로 저장되며, PCB의 구조는 다음과 같음 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭 Context Switching 우리말로는 문맥 교환이라고함프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업을 말함.컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경되며, 실행중인 프로세스의 작업 내용을 PCB에 저장하고 실행 될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅됨
인프런워밍업클럽3기
・
CS
・
1주차
・
미션
・
운영체제