게시글
블로그
전체 92025. 03. 23.
0
[인프런워밍업클럽] 3주차 발자국 미션
운영체제메모리레지스터 : 속도 빠름, 용량 작음, 가격 비쌈레지스터와 메인메모리 사이에는 캐시가 있음캐시 : CPU가 사용하는 메모리로 굉장히 빠름, 메모리는 느림, 미리 가져온 데이터를 저장하는 곳, 성능을 이유로 여러개를 둠메인메모리: 실제 운영체제와 다른 프로세스들이 올라가는 공간, 휘발성메모리 , 속도빠름, 실행중인 프로그램만 올림보조저장장치 : 비휘발성 메모리, 속도 느림, 용량 큼, 가격 쌈 메모리와 주소메인메모리(메모리)운영체제는 메모리를 관리하기 위해 1바이트 크기로 구역을 나누고 숫자를 매김숫자 → 주소절대주소(물리 주소), 상대주소(논리 주소)재배치 레지스터에는 프로그램의 시작 주소가 저장 되어있음 메모리할당방식가변분할(연속 메모리 할당),세그멘테이션프로세스가 크면 메모리도 크게 할당장점: 메모리의 연속된 공간에 할당되기 때문에 더 크게 할당되서 낭비되는 공간인 내부단편화가 없음단점: 외부단편화가 발생고정 분할 방식(비연속 메모리 할당), 페이징프로세스 크기와 상관없이 메모리를 할당장점: 구현 간단, 오버헤드가 작음단점: 작은 프로세스도 큰 영역에 할당되서 공간이 낭비되는 내부 단편화 발생가상메모리가상메모리의 크기이론적 : 무한대, 실제 : 물리메모리 크기와 CPU 비트수로 결정32비트인 CPU인 경우 4GB 정도, 가상 메모리 크기도 똑같이 4GB가변분할방식(세그멘테이션) - 페이징 혼용고정분할방식(페이징)가상 주소는 메모리나 스왑영역 한 곳에 위치메모리 관리자는 가상주소와 물리주소를 1대1 맵핑 세그멘테이션함수, 모듈로 구성외부 단편화 문제가 있어서 해결하기 위해서 고안프로세스마다 크기가 달라 바운드 어드레스를 가지고 있음페이징(고정분할)메모리를 할당할 때 정해진 크기의 페이지로 나눔, 모든 페이지의 크기가 같기 때문에 관리가 쉬움페이지 : 논리주소 공간은 일정한 크기로 균일하게 나눔모든 페이지의 크기가 동일해서 크기를 표현하는 바운드 어드레스는 필요하지 않음외부단편화 x, 내부 단편화 O내부단편화: 정해진 크기의 페이징보다 프로세스의 정보가 작으면 그만큼 공간이 낭비 입출력장치그래픽카드, 하드디스크, SSD, 키보드, 마우스 등캐릭터 디바이스데이터 전송 단위가 캐릭터(글자)상대적으로 크기가 작음마우스, 키보드,사운드카드,직렬, 병렬 포트블록디바이스데이터 전송 단위가 블록(범위)상대적으로 크기가 큼하드디스크, SSD, 그래픽 카드하드디스크장점: 기계적으로 헤드를 움직여 속도가 많이 느리고 소음도 낮음단점: 굉장히 느림플래시 디스크장점: 빠르고 조용함, 안전단점: 특정한 지점에 데이터를 썼다면 덮어 쓰기가 불가능함, 똑같은 지점에 데이터를 쓰러면 기존에 있던 데이터를 지우고 새로 써야 함, 지우기 가능한 횟수가 정해져 있음, 계속 반복하다보면 망가져서 사용할 수 없음 자료구조와 알고리즘버블정렬시간복잡도: O(n²)앞에 있는 숫자와 옆에 있는 숫자를 비교해서 자리를 바꾸는 알고리즘장점: 가장 쉽게 생각할 수 있는 정렬방법, 이해와 구현이 간단단점: 성능이 ON제곱으로 별로 좋지 않음선택정렬시간복잡도: O(n²)배열의 정렬되지 않은 영역의 첫번째 원소를 시작으로 마지막 원소까지 비교 후 가장 작은 값을 첫 번째 원소로 가져옴장점: 이해하기 쉽고 구현하기 쉬움단점: 성능이 좋지않음삽입정렬시간복잡도: O(n²)정렬되지 않은 영역에서 데이터를 하나씩 꺼내서 정렬된 영역 내에 적절한 위치에 삽입하는 알고리즘장점: 이해하기 쉽고 구현하기 쉬움단점: 성능이 좋지 않음병합정렬시간복잡도: O(n log n)재귀로 정렬하는 알고리즘장점: 성능이 훨씬 좋음단점: 재기적인 기법으로 이해하기 어려움퀵정렬시간복잡도: O(n log n)분할정복 알고리즘장점: 성능이 훨씬 좋음단점: 재기적인 기법으로 이해하기 어려움 회고벌써 3주의 시간이 지나갔다.. 아직도 부족한 부분이 많아서 복습을 더 하고 다시 강의를 보려고 한다그리고 운영체제 과목에 대한 흥미를 느껴 오늘 도서관에서 '쉽게 배우는 운영체제' 책을 빌려왔다빌린 책과 함께 강의를 다시 들으며 복습하고 나만의 것으로 만들기 위해서 노력해야겠다
알고리즘 · 자료구조
2025. 03. 23.
0
[인프런워밍업클럽] 3주차 운영체제 미션
운영체제1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터 : 속도 빠름, 용량 작음, 가격 비쌈레지스터와 메인메모리 사이에는 캐시가 있음캐시 : CPU가 사용하는 메모리로 굉장히 빠름, 메모리는 느림, 미리 가져온 데이터를 저장하는 곳, 성능을 이유로 여러개를 둠메인메모리: 실제 운영체제와 다른 프로세스들이 올라가는 공간, 휘발성메모리 , 속도빠름, 실행중인 프로그램만 올림보조저장장치 : 비휘발성 메모리, 속도 느림, 용량 큼, 가격 쌈 2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터CPU 내에 존재하는 레지스터, 메모리 관리자가 사용자 프로세스가 값을 벗어났는지 검사하고 만약 벗어 났다면 그 프로세스를 종료 시킴 3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변분할(연속 메모리 할당),세그멘테이션프로세스가 크면 메모리도 크게 할당장점: 메모리의 연속된 공간에 할당되기 때문에 더 크게 할당되서 낭비되는 공간인 내부단편화가 없음단점: 외부단편화가 발생고정 분할 방식(비연속 메모리 할당), 페이징프로세스 크기와 상관없이 메모리를 할당장점: 구현 간단, 오버헤드가 작음단점: 작은 프로세스도 큰 영역에 할당되서 공간이 낭비되는 내부 단편화 발생 4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱 5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?이유를 함께 적어주세요.운영체제나 프로그램을 사용하기 때문에 필요함, 없으면 컴퓨터가 부팅이 되지 않음 6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일 시스템은 효율적인 관리를 위해 빈 공간을 모아둔 프리블록 리스트를 가지고 있음특정 파일을 삭제한다면 파일시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고프리블록 리스트에 추가함, 이렇게 처리하면 파일이 삭제된 것처럼 느껴짐, 기존에 사용했던 블록의 데이터는 그대로 남아있기 때문에 포렌식을 하면 복구 할 수 있음
알고리즘 · 자료구조
2025. 03. 23.
0
[인프런워밍업클럽] 3주차 자료구조와 알고리즘 미션
자료구조와 알고리즘1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블정렬시간복잡도: O(n²)앞에 있는 숫자와 옆에 있는 숫자를 비교해서 자리를 바꾸는 알고리즘장점: 가장 쉽게 생각할 수 있는 정렬방법, 이해와 구현이 간단단점: 성능이 ON제곱으로 별로 좋지 않음선택정렬시간복잡도: O(n²)배열의 정렬되지 않은 영역의 첫번째 원소를 시작으로 마지막 원소까지 비교 후 가장 작은 값을 첫 번째 원소로 가져옴장점: 이해하기 쉽고 구현하기 쉬움단점: 성능이 좋지않음삽입정렬시간복잡도: O(n²)정렬되지 않은 영역에서 데이터를 하나씩 꺼내서 정렬된 영역 내에 적절한 위치에 삽입하는 알고리즘장점: 이해하기 쉽고 구현하기 쉬움단점: 성능이 좋지 않음병합정렬시간복잡도: O(n log n)재귀로 정렬하는 알고리즘장점: 성능이 훨씬 좋음단점: 재기적인 기법으로 이해하기 어려움퀵정렬시간복잡도: O(n log n)분할정복 알고리즘장점: 성능이 훨씬 좋음단점: 재기적인 기법으로 이해하기 어려움 2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.타뷸레이션상향식 계산 방식으로 계산에 필요하지 않을 수도 있는 값도 미리 계산해서 테이블에 저장해 둠, 이렇게 계산되어 저장된 값을 필요할 떄 사용해 빠르게 계산, 메모리도 절약하고 속도도 빠르게 해결할 수 있음
알고리즘 · 자료구조
2025. 03. 16.
0
[인프런워밍업클럽] 2주차 발자국 미션
섹션4 프로세스 동기화유닛 1 프로세스간 통신프로세스는 독립적으로 실행 or 다른 프로세스와 데이터를 주고 받으며 통신통신은 한 컴퓨터 내에서 실행되고 있는 다른 프로세스와 할 수도 있고, 네트워크로 연결된 다른 컴퓨터에 있는 프로세서와 할 수 도 있음종류한 컴퓨터 내에서 통신파일과 파이프파일통신을 하려는 프로세스들이 하나의 파일을 이용해 읽고 쓰는 방법파이프운영체제가 생성한 파이프를 이용해 데이터를 읽고 쓰는 방법스레드코드, 데이터, 힙 영역을 공유하고 스택만 각자 자기의 것을 가지고 있음데이터 영역에 있는 전역변수나 힙을 이용하면 통신이 가능네트워크운영체제가 제공하는 소켓통신이나 다른 컴퓨터에 있는 함수를 호출하는 RPC(원격 프로시저 호출)를 이용해 통신유닛2 공유자원과 임계구역공유자원프로세스 간 통신을 할 때 공동으로 이용하는 변수, 파일문제공유 자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과 달라짐컨텍스트 스위칭으로 시분할 처리를 하기 때문에 어떤 프로세스가 먼저 실행되고 어떤 프로세스가 나중에 실행되는지 예측하기 힘듦연상결과를 예측하기 힘들고 여기에 발생한 문제를 동기화 문제라고 함예) 게임을 예시로 듦캐릭터 총 체력 100, 현재 체력 20지금은 적에게 공격을 받고 있고 플레이어는 죽지 않기 위해 물약을 먹음이때 물약을 먹는 코드와 적에게 공격받는 코드에서 발생할 수 있는 동기화 문제를 살펴봄두 가지 코드가 동시에 실행됐는데 CPU 스케줄러에 의해 공격받는 코드가 먼저 실행됐다고 가정두번째임계구역여러 프로세스가 동시에 사용하면 안되는 영역경쟁조건공유자원을 서로 사용하기 위해 경쟁하는 것임계구역 문제 해결 방법상호배제의 메커니즘이 필요함요구사항주어진 시간에 항상 하나의 프로세스만 임계구역에 접근 가능동시에 여러개의 요청이 있더라도 하나의 프로세스만 진입하도록 허용임계구역에 들어간 프로세스는 최대한 빠르게 나와야함 → 다른 프로세스들이 오래 기다리기 떄문에유닛3 세마포어프로세스 : 프린트를 사용하려는 직원, 프린터는 여러 프로세스들이 같이 쓰고 있는 공유자원대기큐 : 프린트를 사용하기 위해 프로세스가 기다리는 공간운영체제 : 열쇠관리자세마포어 : 열쇠관리자가 들고 있는 열쇠, 정수형 변수사용법세마포어를 사용하면 공유자원에 여러 프소세스가 동시에 접근하지 못함 → 동기화 문제가 일어나지 않음세마포어는 실제로 여러개의 열쇠를 가질 수 있음정수형 변수, 공유자원이 2개라면 세마포어의 값은 2, → 열쇠 2개로 설정단점웨이트 함수와 시그널 함수의 순서를 이상하게 호출해서 세마포어를 잘못 사용할 수 있다는 가능성섹션5 데드락교착상태여러프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무 작업도 진행하지 못하는 상태이유공유자원 때문에 발생어떤 자원을 여러개의 포로세스가 공유하지 않는다면 교착상태는 발생하지 않음예시) 식사하는 철학자필요조건상호배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유가 되면 안됨비선점 : 프로세스 A가 리소스르 점유하고 있는데 프로세스 B가 리소스를 뺏을 수 없음점유와 대기 : 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야만 함원형대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있다는 것해결방법교착상태 회피프로세스들에게 자원을 할당할 때 어느 정도 자원을 할당해야 교착상태가 발생하는지 파악해서 교착상태가 발생하지 않는 자원을 할당함시스템의 총 자원 : 운영체제는 프로세스들에게 자원을 할당하기 전에 자기가 가지고 있는 전체 자원의 수를 알고 있어야 함최대 요구 자원 : 프로세스들은 각자 자기가 필요한 자원의 초대 숫자를 운영체제에게 알려줘야 함교착상태 알아내는 법가벼운 교착상태 검출타이머를 이용하는 방식, 프로세스가 일정시간동안 작업을 진행하지 않는다면 교착상태가 발생했다고 간주하고 교착상태를 해결무거운 교착상태 검출자원할당 그래프를 이용, 현재 운영체제에서 프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결섹션 6 컴파일과 프로세스컴파일언어개발자가 코드 작성 → 컴파일 → 0과1 기계어로 실행파일 만듦인터프리터언어개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행시 코드를 한 줄 씩 해석해 실행하는 언어프로세스의 메모리 구조스택 : 지역 변수, 함수 관련 값힙 : 실행 중 메모리 공간을 할당할 수 있는 유동적인 공간데이터 : 전역변수나 배열코드 : 실행해야 할 코드중간정리하드웨어, 운영체제 구조, 프로세스 회고운영체제는 강의를 듣고 복습을 하면 이해가 조금 잘 되는데 자료구조와 알고리즘은 이해하는데 시간이 많이 필요하다.. 복습을 더 많이 하고, 관련 서적들도 좀 찾아서 공부해야 할 것 같다
알고리즘 · 자료구조
2025. 03. 16.
0
[인프런워밍업클럽] 2주차 자료구조와 알고리즘 미션
자료구조와 알고리즘1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?기저조건이 없으면 함수가 계속해서 자기 자신을 호출하기 때문에 무한 반복된다.콜 스택이 계속 쌓여서 스택 오버 플로우가 발생함2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요. function sumOdd(n){ if (n 3. 다음 코드는 매개변수로 주어진 파일 경로(.는 현재 디렉토리)에 있는 하위 모든 파일과 디렉토리를 출력하는 코드입니다. 다음 코드를 재귀 함수를 이용하는 코드로 변경해보세요.const fs = require("fs"); // 파일을 이용하는 모듈 const path = require("path"); // 폴더와 파일의 경로를 지정해주는 모듈 function traverseDirectory1(directory){ const stack = [directory]; // 순회해야 할 디렉토리를 저장할 스택 while (stack.length > 0) { // 스택이 빌 때까지 반복 const currentDir = stack.pop(); // 현재 디렉토리 const files = fs.readdirSync(currentDir); // 인자로 주어진 경로의 디렉토리에 있는 파일or디렉토리들 for (const file of files) { // 현재 디렉토리의 모든 파일or디렉토리 순회 const filePath = path.join(currentDir, file); //directory와 file을 하나의 경로로 합쳐줌 const fileStatus= fs.statSync(filePath); // 파일정보 얻기 if (fileStatus.isDirectory()) { // 해당 파일이 디렉토리라면 console.log('디렉토리:', filePath); stack.push(filePath); } else { // 해당 파일이 파일이라면 console.log('파일:', filePath); } } } } traverseDirectory1("."); // 현재 경로의 모든 하위 경로의 파일, 디렉토리 출력 변경const fs = require("fs"); // 파일을 이용하는 모듈 const path = require("path"); // 폴더와 파일의 경로를 지정해주는 모듈 function traverseDirectory(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); traverseDirectory(filePath); } else { // 해당 파일이 파일이라면 console.log('파일:', filePath); } } } traverseDirectory("."); // 현재 경로의 모든 하위 경로의 파일, 디렉토리 출력
알고리즘 · 자료구조
2025. 03. 16.
0
[인프런워밍업클럽] 2주차 운영체제 미션
운영체제1. FIFO 스케줄링의 장단점이 뭔가요?장점 : 단순하고 직관적단점 : 한 프로세스가 완전히 끝나야 다음 프로세스가 시작, 실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업을 기다려야 함CPU는 I/O작업 끝날 때까지 쉬고 있기 때문에 CPU 사용률이 떨어지게 됨2. SJF를 사용하기 여러운 이유가 뭔가요?어떤 프로세스가 얼마나 실행될지 예측이 힘듦BurstTime이 긴 프로세스는 아주 오랫동안 실행되지 않을 수 도 있음3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?컨텍스트 스위칭이 자주 일어나게 되서 타임 슬라이스에서 실행되는 프로세스의 처리량보다 컨텍스트 스위칭을 처리하는 양이 훨씬 커짐, 배보다 배꼽이 더 커지는 상황이 발생, 즉, 오버헤드가 너무 크다 4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU Bound Process : 대부분의 시간을 CPU 연산 작업I/O Bound Process : 대부분의 시간을 I/O 작업, CPU 연산은 조금만 작업 5. 공유자원이란무엇인가요?공유자원 : 프로세스 간 통신을 할 때 공동으로 이용하는 변수, 파일 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유가 되면 안됨비선점 : 프로세스 A가 리소스르 점유하고 있는데 프로세스 B가 리소스를 뺏을 수 없음점유와 대기 : 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야만 함
알고리즘 · 자료구조
・
운영체제
2025. 03. 09.
0
[인프런워밍업클럽] 1주차 3기 CS 전공지식 미션 발자국
운영체제 운영체제 개요프로세스 관리메모리 관리하드웨어 관리 운영체제의 역사1940년도 애니악 : 미사일 탄도 계산, 전자 디지털 계산기, 속도 느림, 오래 걸림, 하드웨어 비용이 비쌈, 인건비 저렴1950년도 초반 : 직접 회로(IC) 개발, 현재 컴퓨터 모양, 펀치카드로 → 프로그래밍 → 계산 결과1950년도 중후반 : 오퍼레이터의 오버헤드가 너무 느려짐, 싱글스트림 배치시스템입출력을 담당하는 i/o 디바이스 컨트롤러를 만들어 입출력중에도 cpu가 계산하도록 함출력은 i/o 디바이스 컨트롤러를 이용해서 cpu와 분리가 가능하지만, cpu 성능이 떨어짐1960년도 싱글스트림 배치시스템 성능 향상 → 시분할 시스템파일시스템 등장유닉스 운영체제 개발 → 프로그램을 동시에 여러 개 실행시키는 멀티 프로그래밍 프로그램과 프로세스프로그램 : 하드디스크 등과 같은 저장장치에 저장된 명령문의 집합체, 컴퓨터 관점에서 하디디스크 즉, 저장장치 만 사용하는 수동적인 존재ex) 앱, .exe프로세스 : 실행중인 프로그램, 메모리도 사용, 운영체제의 CPU스케줄링 알고리즘에 따라서 CPU도 사용, 필요에 따라 입력과 출력을 하기 때문에 능동적인 존재프로세스의 구조? 코드영역, 데이터 영역, 스택 영역, 킵 영역코드 영역 : 자신을 실행하는 코드가 저장데이터영역 : 전역 변수와 스태틱 변수가 저장스택 영역에서는 지역변수와 함수 호출을 했을 때 필요한 정보들이 저장힙 영역은 프로그래머가 동적으로 메모리를 할당하는데 사용실행중인 프로그램 : 하드디스크에 저장된 프로그램이 메모리에 올라갔을 떄 실행중인 프로그램 → 스레드 멀티프로그래밍과 멀티프로세싱멀티프로그래밍 : CPU가 프로세스를 실행하다가 I.O 작업을 만나면 해당 프로세스에서 발생한 I.O 작업은 기다리면서 다른 프로세스를 실행 → CPU가 쉬는 시간이 적어져 효율성이 높아짐멀티프로세싱 : 멀티프로세서로 작업을 처리하는 것멀티프로세서란?모든 프로세스를 동시에 실행시키는 것처럼 느끼게 하는 기술을 멀티 태스킹여기서 CPU를 한개가 아니라 여러개를 이용할 수 있는데 CPU가 여러개 있다면 이를 멀티프로세서라고 함 PCB운영체제는 여러 개의 프로세스를 전부 다 관리, 공평하게 실행프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장 컨텍스트 스위칭프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스 상태를 저장하고 다른 프로세스의 상태 값으로 교체하는 작업발생하는 이유?CPU 점유시간이 다 되거나 입출력 요청이 있거나 다른 종류의 인터럽트가 있을 때 발생 자료구조와 알고리즘 자료구조와 알고리즘이란?자료구조 : 데이터가 어떤 구조로 저장, 사용 되는지를 나타냄예) 변수, 배열알고리즘 : 어떤 문제를 해결하기 위한 확실한 방법, 자료구조에 따라 알고리즘이 변경 되기도 함 시간복잡도란?특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간사용자마다 컴퓨터 사양이 다르기 때문같은 알고리즘이라도 성능이 좋지 않은 컴퓨터와 성능이 좋은 컴퓨터의 실행시간이 다르기 때문에 배열이란?일반적인 배열 : 기본적으로 제공되는 배열, 읽기, 쓰기에 좋음, 삽입, 삭제는 좋지 않음자바스크립트 배열 : 상황에 따라서 연속적, 불연속적으로 메모리 할당하지만 대부분 불연속적으로 할당 연결리스트란?저장하려는 데이터들을 메모리 공간의 분산에 할당, 이 데이터들을 서로 연결 시켜줌 스택이란?먼저 들어간 데이터가 나중에 나오는 규칙 큐란?먼저 들어간 데이터가 먼저 나오는 규칙 덱이란?데이터의 삽입과 제거를 헤드와 테일 두 군데서 자유롭게 할 수 있음 해시테이블이란?해시와 테이블이 합쳐진 자료구조빠른 데이터 탐색, 삽입, 삭제 셋이란?데이터의 중복을 허용하지 않는 자료구조 회고자료구조와 알고리즘 부분이 많이 부족해서 겁을 많이 먹고 있었고, 강의를 듣고 복습을 많이 못한 것 같아서 아쉬웠다.다음주는 진도표 대로 나가면서 1주차에 부족했던 부분들을 따로 복습할 예정이다 미션 해결 과정미션을 받고 다시 개념들을 정리하는 시간들을 가졌다막상 강의를 들을 때는 아~ 이렇게 되는구나 라고 생각이 되지만시간이 지나고 문제를 봤을 때 기억이 잘 나지 않아서미션을 보고 그 부분을 다시 들으면서 미션을 해결해 나갔다.아직 많이 부족하지만 좀 더 열심히 해야 겠다는 생각이 들었다.
알고리즘 · 자료구조
2025. 03. 09.
0
[인프런워밍업클럽] 1주차 3기 CS전공지식 자료구조와 알고리즘 미션
자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요. 해시테이블을 사용키 - 값 구조로 되어있기 때문에 학생의 번호, 이름을 키로 설정하면 O(1)로 조회 할 수 있음새로운 학생을 추가하거나 삭제하기 쉬움 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.주문은 들어온 순서대로 처리됩니다.이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?이유를 함께 적어주세요. 큐를 선택주문이 들어온 순서대로 처리되어야 하기 때문에 선입선출의 기능을 가지고 있는 큐를 사용 3. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.class Node { constructor(data, next = null) { this.data = data; this.next = next; } } class Stack { constructor() { this.head = null; this.count = 0; } isEmpty() { return this.count === 0; } getLastNode() { if (this.isEmpty()) return null; let current = this.head; while (current.next !== null) { current = current.next; } return current; } push(data) { let newNode = new Node(data); if (this.head === null) { this.head = newNode; } else { let lastNode = this.getLastNode(); lastNode.next = newNode; } this.count++; } pop() { if (this.isEmpty()) { throw new Error("스택이 비어있습니다."); } if (this.count === 1) { let deletedData = this.head.data; this.head = null; this.count--; return deletedData; } let current = this.head; while (current.next.next !== null) { current = current.next; } let deletedData = current.next.data; current.next = null; this.count--; return deletedData; } peek() { if (this.isEmpty()) { throw new Error("스택이 비어있습니다."); } return this.getLastNode().data; } printAll() { let current = this.head; let result = "["; while (current !== null) { result += current.data; current = current.next; if (current !== null) result += ", "; } result += "]"; console.log(result); } } 4. 해시테이블의 성능은 해시 함수에 따라 달라집니다.수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다.이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.힌트: charCodeAt() 함수를 이용예시:name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력 hashFunction(name){ } 수정한 코드function hashFunction(name, hahSize = 100) { let hash = 0; for (let i = 0; i
알고리즘 · 자료구조
・
자료구조
・
알고리즘
2025. 03. 09.
0
[인프런워밍업클럽] 1주차 3기 CS전공지식 운영체제 미션
운영체제javascript while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?인터럽트 방식을 사용해야합니다, 폴링 방식과 달리 특정 이벤트가 발생할 때 비동기적으로 코드가 실행 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램 : 하드디스크나 다른 저장장치에 저장된 명령어의 집합체, 저장장치에 저장되어 실행되지 않은 상태로 존재, 수동적예) 앱, .exe 파일프로세스: 프로그램이 메모리에 적재되어 실행 중인 상태, 메모리와 CPU를 사용, 운영체제의 CPU 스케줄링 알고리즘에 따라서 실행, 입력과 출력을 통해 능동적으로 작용예) 실행 중인 앱, 브라우저 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍: 한 CPU에서 여러 프로세서를 번갈아 실행하여 CPU의 쉬는 시간을 줄이는 기술멀티프로세싱 : 여러개의 CPU(멀티프로세서)를 사용하여 여러 작업을 동시에 처리하는 기술4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?프로세스의 정보를 가지고 있는 PCB(ProcessControlBlock)를 저장, CPU 스케쥴링 사용 5. 컨텍스트 스위칭이란 뭔가요?프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스 상태를 저장하고 다른 프로세스의 상태 값으로 교체하는 작업발생하는 이유는?CPU 점유시간이 다 되거나 입출력 요청이 있거나 다른 종류의 인터롭트가 있을 때 발생
알고리즘 · 자료구조
・
운영체제
・
CS전공지식3기
・
1주차미션