블로그
전체 42025. 03. 10.
0
[2주차] CS 발자국 제출
자료구조와 알고리즘 재귀함수재귀 함수란, 함수 내에서 자기 자신을 호출하는 함수를 의미한다.재귀 호출을 멈추는 조건(기저 조건)이 반드시 있어야 하며, 그렇지 않으면 호출이 무한히 반복되어 스택 오버플로우가 발생할 수 있다. 운영체제임계 구역: 여러 프로세스가 동시에 접근하면 안 되는 영역.임계 구역에는 동시에 하나의 프로세스만 접근할 수 있다.여러 요청이 들어와도 한 번에 하나의 프로세스만 접근할 수 있도록 제한해야 한다.임계 구역에 들어간 프로세스는 가능한 한 빠르게 종료해야 한다.세마포어: 정수형 변수로, wait()과 signal() 함수를 이용해 프로세스 간 접근을 조율한다. 선점한 프로세스가 작업을 끝낼 때까지 다른 프로세스는 대기한다. 교착 상태: 여러 프로세스가 공유 자원을 서로 점유한 채 기다리면서 정체된 상태.교착 상태 해결 방법교착 상태가 발생하면 일부 프로세스를 강제 종료하고, 필요하면 이전 상태로 롤백한다.사전에 예방하기 위해 자원 할당 순서를 정하거나, 한 번에 모든 자원을 할당받도록 한다.
2025. 03. 09.
0
[1주차] 운영체제 미션(5개) 제출 스레드
운영체제 while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요? 인터럽트 방식으로 특정 이벤트가 발생했을 때 실행되도록 한다. 프로그램과 프로세스가 어떻게 다른가요?프로세스는 실행 중인 프로그램을 뜻하는 말이다. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 메모리내에서 여러개의 프로세스를 동시에 관리하는 방식이다.멀티프로세싱은 여러개의 CPU로 작업을 병렬 처리하는 방식이다 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?현대 운영체제에서는 MLFQ 기법을 많이 사용한다.컨텍스트 스위칭이란 뭔가요? CPU가 실행중인 프로세스를 변경하는 것
2025. 03. 09.
0
[1주차] 자료구조와 알고리즘 미션(4개) 제출
자료구조와 알고리즘 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 해시테이블. 학생마다 고유번호로 학생의 정보를 조회 빠르게 조회할 수 있어서 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.먼저 들어온 주문부터 나가야 되기 때문에 큐를 사용한다. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.import { LinkedList } from './LinkedList.mjs';class Stack { constructor() { this.list = new LinkedList(); } push(data) { this.list.insertLast(data); } pop() { try { return this.list.deleteLast(); } catch (e) { return null; } } peek() { if (isEmpty()) { return null; } return this.list.getNodeAt(this.list.count - 1); } isEmpty() { return (this.list.count == 0); }}export ( Stack } 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요. 힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력hashFunction(name){ let result = 0; for (let i = 0; i result += name.charCodeAt(i); } return result % 10;}
2025. 03. 04.
0
인프런 워밍업 클럽 스터디 3기 - CS 전공 지식<3월 첫째주 발자국>
1주차 학습 내용 자료구조와 알고리즘시간복잡도란?"특정 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간"주로 사용하는 측정 기법은 Big-O 이다. Big-O란 데이터가 늘어남에 따라 계산량이 얼마나 늘어나는지를 최악의 경우 기준으로 평가하는 방법이다.O(n) 선형시간 알고리즘이다. 데이터가 많아질수록 계산량(n)이 증가한다.O(1) 상수시간 알고리즘이다. 데이터의 크기와 상관없이 상수의 시간이 걸린다. 배열 vs 연결 리스트배열: 연속된 메모리에 데이터를 저장하여 인덱스 접근이 O(1)로 빠르지만, 삽입/삭제 시 성능 저하 발생.연결 리스트: 임의의 메모리 위치에 데이터를 저장하며 삽입/삭제가 O(1)로 빠르지만, 조회 성능이 O(n)로 낮음. 스택 vs 큐 vs 덱스택 : 마지막에 추가된 요소가 먼저 제거됨. 후입선출큐: 먼저 추가된 요소가 먼저 제거됨. 선입선출덱: 양쪽에서 삽입과 삭제가 가능한 자료구조 해시테이블 vs set해시테이블: 키 - 값 구조를 가지고 조회에 O(1) 성능을 가진다. 대신 메모리를 많이 차지함.파이썬의 딕셔너리 구조를 말하는거 같다.set: 중복되지 않는 요소의 집합. 요소의 존재 여부를 빠르게 파악 운영체제 폰노이만 구조폰노이만 구조는 메모리에 프로그램을 저장하고, 버스를 통해 데이터를 전송해서 CPU에서 처리하는 방식이다.메모리 종류RAM: 전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.ROM: 한 번 쓰면 계속 남는 비휘발성 메모리이다.부팅 과정: 부팅할 때 BIOS가 실행되고, 하드웨어에 이상이 없는지 체크한다.인터럽트: 인터럽트는 CPU가 작업을 잠시 멈추고, 중요한 작업을 먼저 처리하는 방식이다.프로세스: 프로세스는 실행 중인 프로그램이다.멀티프로그래밍: 멀티프로그래밍은 메모리 내에서 여러 개의 프로세스를 동시에 관리하는 방식이다.멀티프로세싱: 멀티프로세싱은 여러 개의 CPU로 작업을 병렬 처리하는 방식이다. 프로세스 상태 변화생성 → 준비 → 실행 → (대기) → 완료생성: PCB(Process Control Block)를 생성하고, 메모리 적재를 요청한 상태. 승인이 나면 준비 상태로 이동.준비: CPU 할당을 기다리는 상태. 대부분의 프로세스가 이 상태에 있음.실행: CPU를 할당받아 실행되는 상태. 단, 정해진 시간만큼만 실행되며 시간이 초과되면 다시 준비 상태로 이동.대기: 입출력(I/O) 요청 등으로 대기하는 상태. CPU는 다른 프로세스에 할당되며, 입출력 완료 후 다시 준비 상태로 이동.완료: 모든 작업을 마치고 프로세스가 종료되는 상태. 쓰레드프로그램을 중복해서 실행 할 경우 프로세스의 복사도 같이 일어난다.(크롬탭10개 생성 시 프로세스도 10개 실행)이럴 때 메모리의 부하를 막기위해 나온 것이 쓰레드다. 쓰레드는 프로세스 내에 존재하고 1개 이상이 있을 수 있다.쓰레드는 PCB, 코드, 데이터, 힙영역을 공유한다. 단 스택은 공유하지 않고 쓰레드마다 하나씩 가지고 있다. CPU 스케줄링 알고리즘FIFO (First In First Out): 먼저 들어온 순서대로 실행. 실행 시간이 긴 프로세스가 앞에 있으면 전체 대기 시간이 길어질 수 있어 현대 운영체제에서는 잘 쓰이지 않음.SJF (Shortest Job First): 실행 시간이 짧은 순서대로 실행. 평균 대기 시간을 줄일 수 있지만, 실행 시간이 긴 프로세스는 계속 뒤로 밀려나는 스타베이션(기아) 문제가 발생할 수 있어 잘 사용되지 않음.RR (Round Robin): 각 프로세스에 타임슬라이스(정해진 시간)를 할당해 순환하며 실행.타임슬라이스가 너무 크면 여러 프로세스가 실행될 때 응답성이 떨어지고,너무 작으면 컨텍스트 스위칭 비용이 증가해 성능이 저하됨.MLFQ (Multi-Level Feedback Queue): 현대 운영체제에서 많이 사용하는 CPU 스케줄링 기법.여러 개의 우선순위 큐를 사용해 CPU 실행시간에 따라 우선순위를 조정.CPU Bound 프로세스는 점점 낮은 우선순위 큐로 이동하며 타임슬라이스가 커짐.I/O Bound 프로세스는 높은 우선순위를 유지해 빠르게 실행됨.FIFO, SJF, RR의 장점을 조합한 방식으로, 효율적인 CPU 자원 관리를 가능하게 함.1주차 회고파이썬에 너무 익숙해져 있어서 그런가 자바스크립트 코드를 읽고 이해하는데 어려움이 있었다.