![[인프런 워밍업 클럽 3기 CS] 자료구조와 알고리즘 / 운영체제 회고2](https://cdn.inflearn.com/public/files/blogs/be3efe44-26c3-448e-9af3-d7ca5e12269b/IMG_3742.jpeg)
[인프런 워밍업 클럽 3기 CS] 자료구조와 알고리즘 / 운영체제 회고2
운영체제 요약
FIFO 스케줄링의 장단점
• 장점: 구현이 간단하고 공정함.
• 단점: 긴 작업이 먼저 오면 짧은 작업이 지연되는 Convoy Effect 발생.
SJF를 사용하기 어려운 이유
• 실행 시간을 미리 알기 어려움.
• 긴 작업이 계속 뒤로 밀려 기아 상태(Starvation) 발생 가능.
RR에서 타임 슬라이스가 작을 때 문제
• 문맥 전환 비용 증가 → 성능 저하 발생.
MLFQ에서 CPU Bound vs. I/O Bound 구분 방법
• I/O Bound: 짧은 CPU 사용 후 대기 → 높은 우선순위 유지
• CPU Bound: CPU 사용이 길어짐 → 낮은 우선순위로 강등
공유 자원이란?
• 여러 프로세스가 동시에 접근하는 자원 (파일, 메모리, CPU 등).
교착 상태(Deadlock) 발생 조건
1. 상호 배제 – 한 번에 한 프로세스만 사용 가능.
2. 점유 및 대기 – 자원을 점유한 채 추가 자원 대기.
3. 비선점 – 자원을 강제로 빼앗을 수 없음.
4. 순환 대기 – 프로세스들이 서로 자원을 기다리는 순환 구조.
자료구조와 알고리즘 요약
재귀 함수에서 기저 조건 오류 문제
• 잘못 설정하면 무한 재귀 → Stack Overflow 발생.
0부터 n까지 홀수의 합 구하는 재귀 함수 (JavaScript)
function sumOdd(n) {
if (n <= 0) return 0;
return (n % 2 !== 0 ? n : 0) + sumOdd(n - 1);
}
console.log(sumOdd(10)); // 25
재귀를 이용한 디렉토리 탐색 코드 (JavaScript)
const fs = require("fs");
const path = require("path");
function traverseDirectory(directory) {
const files = fs.readdirSync(directory);
for (const file of files) {
const filePath = path.join(directory, file);
const fileStatus = fs.statSync(filePath);
if (fileStatus.isDirectory()) {
console.log('디렉토리:', filePath);
traverseDirectory(filePath);
} else {
console.log('파일:', filePath);
}
}
}
traverseDirectory(".");
기존 반복문 방식 → 재귀 함수로 변환하여 모든 파일 및 폴더 탐색.
댓글을 작성해보세요.