게시글
블로그
전체 62024. 10. 27.
1
인프런 워밍업 클럽 스터디 2기 - CS 전공지식<10월 셋째주 발자국>
알고리즘각 정렬에 대해 학습하니다. 삽입 정렬까지는 혼자 힘으로 개념을 구현할만하다고 느꼈지만 퀵 정렬과 병합 정렬의 경우 구현을 하기 위해 많은 시간이 소요되었습니다. 지금 해당 알고리즘을 혼자 구현해보고 강의를 수강한 시간이 1주 정도 지났지만, 해당 알고리즘을 혼자 구현한 기억으로 금방 대략적인 흐름과 동작방식을 떠올릴 수 있었습니다. 이런 점에서 그냥 무작정 따라 치는 것을 넘어서 함께 고민하고 능동적으로 강의를 따라오는 것이 매우 중요하다는 것을 느꼈습니다. 운영체제 지금까지의 강의 과정 중에 이번 강의가 가장 어려웠습니다. 특히 가상 메모리의 구현 과정으로 세그멘테이션, 페이징, 페이지드 세그멘테이션, 메모리를 가져오는 방법, 메모리를 내보내는 페이지 교체 정책을 한번에 정리해서 메모리의 동작 과정을 정리하는 것에 많은 시간이 소요되었습니다. 강의에 나온 에니메이션을 따라 그려보고 블로그, 유튜브 등을 참고하며 추가로 학습을 하며 얼추 감이 잡힌 것 같습니다. 운영체제 강의 중에 제일 고비가 아니었을까 합니다. 마지막 과제를 늦게 제출하게 되었지만 강의를 완강하고 운영체제와 기초 자료구조를 학습할 수 있는 매우 뜻깊은 기회였습니다. 특히 두 번째 온라인 세션에서 감자님이 알려주신 기초 지식의 힘을 느낄 수 있어서 중간에 지치지 않고 끝까지 완주할 수 있었습니다.
2024. 10. 27.
1
인프런 워밍업 클럽 스터디 2기 - CS 전공지식<10월 셋째주 미션>
운영체제메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.(아래로 갈수록 속도는 감소한다. 용량은 증가한다)레지스터 : cpu가 사용하는 메모리 가용 공간이 가장 작고 속도가 제일 빠르다.케시 : 미리 데이터를 저장하는 용도메인메모리 : os와 process가 실행되는 공간보조저장장치 : 비휘발성 데이터 저장소 프로그램이 저장사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식프로세스 크기에 따라 메모리를 할당하기에 내부 단변화가 발생하지 않는다.외부 단편화가 발생한다.고정 분할 방식구현 방식이 간단하다.외부 단편화보다 공간 낭비가 심한 내부단편화가 발생한다.CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요? 스레싱 HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 일반적으로 운영체제를 HDD 혹은 SDD에 저장합니다. 컴퓨터가 부팅되었을 때, os의 데이터, 코드, 힙영역을 메모리에 올려서 실행합니다. 따라서 현재 사용하고 있는 컴퓨터를 사용하기 위해서는 HDD, SDD가 필요합니다.하지만 경량화된 운영체제를 usb에 저장하거나 운영체제를 사용하지 않는다면, 반드시 필요하다고는 할 수 없습니다.파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?파일 시스템은 파일 테이블의 헤더를 삭제하고 free block list에 추가합니다. 따라서 사용한 파일 정보가 남아있기 때문에 포렌식 복구가 가능합니다.자료구조와 알고리즘지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.거품 정렬: 구현이 간단하다. 하지만 성능이 o(n^2)으로 좋지 않다.삽입 정렬 : 거품정렬과 동일하게 구현이 간단하다. 하지만 이또한 성능이 좋지 않다. o(n^2)선택 정렬 : 배열에서 가장 작은 값을 순차적으로 정렬하는 방법. 위의 정렬 방법과 똑같이 성능이 좋지 않다. o(n^2)병합 정렬 : 재귀적인 방법을 활용하여 데이터를 작은 단위로 나누어 정렬을 진행하여 합치는 방법입니다. 위의 정렬 방법 보다 속도가 더 뛰어납니다. o(n*logn)퀵 정렬 : pivot을 기준으로 데이터를 나눕니다. 이후 pivot을 재외하고 왼쪽 인덱스와 오른쪽 인덱스의 값을 pivot과 비교합니다. 왼쪽인덱스에는 pivot값보다 큰값이 나올때까지 인덱스를 증가하고, 오른쪽 인덱스는 pivot보다 작은 값이 나올때까지 인덱스 값을 감소합니다.만약 각 인덱스가 교차되지 않았다면 양 값을 교환합니다.해당 과정을 서로 교차 될때까지 수행합니다.왼쪽, 오른쪽 인덱스가 교차되었다면, pivot과 오른쪽 인덱스를 교체합니다.해당 방식을 통해 오른쪽 인덱스 값을 기준으로 정렬이 수행됩니다.해당 과정을 왼쪽 인덱스를 기준으로 다시금 반으로 나누어 재귀적으로 수행합니다.해당 방법은 최악의 경우 o(n^2)이고, pivot값을 잘 선택해야 합니다. 하지만 대채적으로 평균 성능인 o(n*logn)을 띄고 더 적은 비교와 메모리 공간을 차지하기 떄문에 병합 정렬보다 퀵정렬이 보다 띄어난 정렬 알고리즘으로 평가합니다.메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.타뷸레이션메모제이션의 경우 스택에 계속 새로운 함수를 생성하기에 해당 방식 자체가 메모리를 낭비하게 됩니다. 이에 비해 타뷸레이션은 한번의 함수 호출로 모든 동작을 완료하기 때문에 코드의 작성이 복잡하게 되어도 메모리를 효육적으로 사용하는 것에는 타뷸레이션이 유리합니다.
2024. 10. 13.
1
[인프런 워밍업 클럽 2기 CS] 2주차 발자국
자료구조재귀 : 하향식 계산 방법이 재귀를 이해하는 확실한 설명이라고 느꼈습니다.버블 정렬 : 배열의 옆 자리 값과 비교하는 방법. 높은 숫자 부터 정렬이 진행됩니다.선택 정렬: 배열에서 값이 가장 작은 값을 머저 찾아서 정렬하는 방법. 작은 숫자 부터 정렬이 진행.지금까지 배운 정렬의 방식은 모두 O(n^2)으로 비효율적입니다. 메모리를 많이 사용하더라도 시간 복잡도를 낮추어야하는 필요가 있습니다. 알고리즘 cpu 스케줄링 : FIFO, SJF, RR, MLFQIPC : RPC, 공유자원 과 임계구역, 세마포어와 모니터데드락: 상호배제, 비선점, 점유와 대기, 원형식사하는 철학자 은행원 알고리즘메모리: 메모리의 종류상대 주소와 절대 주소가변 분할 방식, 고정 분할 방식, 버디 시스템 회고재귀에 대한 사고를 제 나름의 방식으로 명확히 이해할 수 있었습니다.CPU스케줄링에서 IPC, 데드락, 메모리로 이어지는 강의가 마치 이야기 같이 진행되어 큰 틀을 잡고 가기 좋았습니다. 나무 기둥을 세웠으니 가지와 잎을 더해 풍성하게 이야기를 채워야 함을 배웠습니다.
2024. 10. 10.
1
[인프런 워밍업 클럽 CS 2기] 2주차 발자국 - 자료구조/알고리즘
운영체제 FIFO 스케줄링의 장단점이 뭔가요? 장점:알고리즘 구현이 간단하다.단점: 프로세스의 Burst Time이 긴 프로세스가 먼저 대기 큐에 들어온다면, 평균 대기 시간이 길어지게 된다.프로세스의 도착 순서에 따라 성능의 편차가 크다. SJF를 사용하기 여러운 이유가 뭔가요?Burst Time이 짧은 프로세스를 우선 실행하는 알고리즘이다. 하지만 운영체제 입장에서 각 프로세스의 실행 예상시간을 파악하기가 어렵다.또한 Burst Time이 긴 프로세스의 경우 CPU 스케줄링에 의하여 CPU 사용 우선수위가 계속 후순위로 밀려서 영원히 실행되지 않는 차별을 겪을 수 있다. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?Robin Round는 CPU 스케줄링에 의하여 타임 슬라이스에 따라 인터럽트를 발생하여 각 프로세스 별로 일정시간 동안 CPU 사용권한을 준다. 이때 타임슬라이스가 매우 작으면 CPU에서 프로세스의 코드를 실행시키고 작업하는 것보다 컨텍스트 스위칭을 수행하는 비용이 커져서 overhead가 발생할 수 있다. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?CPU 스케줄러는 우선순위 별로 여러 queue를 생성한다. 우선순위가 높은 queue의 타임슬라이스는 짧다.CPU Bound Process의 경우 I/O Bound Process 보다 CPU 점유 시간이 길다. 이때 해당 프로세스가 현재 우선수위 큐의 타임슬라이스 시간까지 작업을 마치지 못하고 CPU 스케줄러에 의해 인터럽트가 발생한다면, 해당 프로세스는 우선순위가 낮은 queue에 포함이 되고 CPU Bound Process일 확률이 높아진다.I/O Bounde Process는 CPU 사용 시간 보다 I/O 작업이 끝나길 기다리는 시간이 많기 때문에 대체적으로 CPU 점유 시간이 짧다. 따라서 MLFQ에서는 다양한 우선순위 큐를 바탕으로 I/O Bound Process와 CPU Bound Process를 구분한다. 공유자원이란무엇인가요?공유자원은 한 프로세스 내의 스레드에서 공통으로 사용하는 자원 혹은 프로세스가 공통으로 접근가능하고 활용할 수 있는 자원을 의미한다. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호배제: 먼저 자원을 차지하면 다른 프로세스는 해당 자원을 사용하지 못한다. 비선점: 다른 프로세스가 차지한 자원을 다른 프로세스에서 가져갈 수 없다. 점유와 대기: 어떤 프로세스가 리소스 A를 가진 상태에서 다른 리소스 B를 기다리는 상태이다. 원형 대기: 점유 대기를 하는 프로세스의 관계가 원형을 이룬다. 자료구조와 알고리즘 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?스택 overflow 문제가 발생한다. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n) { if (n 회고가장 인상 깊은 부분은 재귀함수를 설명하는 부분입니다. 재귀함수의 특징으로 하위 문제의 결과를 기반으로 상위 문제를 해결 이라는 설명이 가장 와 닿았고 이후 재귀를 이해하고 활용하는 것에 큰 도움이 되었습니다!
2024. 10. 04.
1
[워밍업 클럽_CS 전공 스터디 2기] 1주차 발자국
자료구조일주일 동안 자료구조에서는 연결리스트, 배열, 스택, 큐, 덱, 해쉬 테이블, 셋에 대하여 학습하였습니다. 일반 연결리스트를 학습할 때는 해당 데이터의 장점에 관해 파악하기가 쉽지 않았습니다. 대부분의 기능을 배열로 쉽게 활용가능하고 배열에 비해 참조와 수정 삭제의 시간 복잡도에서도 큰 장점을 느끼지 못했습니다. 하지만 연결리스트 이후에 이중연결리스트를 구현하면서 연결리스트의 장점을 느낄 수 있었습니다. 해당 자료구조를 통해 queue 자료 구조와 deck 자료 구조에서 삽입, 삭제가 모두 O(1)의 성능으로 처리 되는 것을 배우면서 연결리스트의 장점을 느낄 수 있었습니다. 강사님이 작성해주신 기초 자료구조를 바탕으로 저만의 방식으로 수정하면서 많이 배울 수 있었습니다. 특히 혼자서 작성한후 이를 테스트 할때, console을 활용하는 방식이 불편해 자바스크립트의 테스트 코드를 도입하여 각 자료구조 코드가 수정되어도 테스트 코드를 통해 쉽게 틀린 부분을 찾을 수 있게 보안한 점이 좋았습니다. 해당 테스트 코드를 통해 해쉬테이블에서 key가 중복인 경우 새로운 데이터를 덮어씌우게 수정하거나, set의 경우 숫자 데이터 이외의 문자열, 배열등의 데이터를 저장할 수 있도록 확장한 점이 좋았습니다. 개념 강의를 수강한 이후 구현 강의를 수강하기 전에 필요한 메서드를 결정하고 혼자 생각하면서 자료구조를 작성하는 시간을 가진점이 좋았지만, 시간에 쫓겨 혼자 힘으로 완성하지 못하고 강의를 참고해서 완성한 부분이 아쉬웠습니다. (연결 리스트, 이중 연결 리스트, 해쉬테이블) 다음 주차에는 시간이 오래 걸려도 스스로 자료구조 알고리즘을 완성할 시간을 가져보려 합니다.운영체제운영 체제의 핵심적인 부분을 그림과 쉬운 설명으로 이해하여 핵심적인 개념을 빠르게 익히고 학습하기 좋았습니다. 짧은 시간에 운영체제 개요, 프로세스와 쓰레드, CPU 스케줄링의 핵심을 짚고 넘어갈 수 있었습니다. 해당 강의에서는 정말 핵심을 쉽고 간결하게 짚어주시기 때문에, 해당 강의를 바탕으로 학습 지식을 확장하는 시간이 필요하다고 여겨집니다. 이해하지 못한 부분 혹은 상세한 동작 방식을 알고 싶은 부분에 대해서 보다 더 파고들어가 정리를 하고자 합니다.
2024. 10. 04.
1
[워밍업 클럽_CS 전공 스터디 2기] 1주차 미션
운영체제1. while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?해당 방식은 스킬 사용 여부를 체크 할 때 동안 다른 어떤 작업도 진행을 하지 못합니다. 스킬 사용 여부 확인을 위해 pooling방식이 아닌 인터럽트 방식을 활용해서 스킬 사용 여부를 알려주기 전까지 다른 작업을 처리하고 비동기 적으로 스킬 사용 여부가 확인이 되면 다시금 해당 작업을 전달받아 처리할 수 있도록 합니다. 2. 프로그램과 프로세스의 차이프로그램은 코드 덩어리로 운영체제가 해당 프로그램을 메모리에 적재하여 실행시키기 이전 상태를 의미합니다.프로세스는 프로그램을 실행시켜서 메모리에 적재되고 PCB를 생성하여 CPU 스케줄링으로 인해 관리되고 있는 상태를 의미합니다.3. 멀티 프로그래밍과 멀티 프로세싱멀티 프로그래밍은 메모리에 여러개의 프로세스가 적재될 수 있는 환경을 의미합니다.멀티 프로세싱은 CPU관점으로 여러개의 프로세스를 처리하는 것을 의미합니다. 4. 운영체제는 프로세스를 관리하기 위해 어떤 것을 활용하는가?PCB를 통해 프로세스를 관리합니다. 프로그램이 메모리에 적재되어 프로세스로 실행이 되면 운영체제는 해당 프로세스를 PCB를 통해 관리합니다.PCB는 포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련정보, CPU스케줄링 정보 등을 가지고 있습니다. 5. 컨테스트 스위칭?컨텍스트 스위칭은 CPU스케줄링으로 인하여 하나의 프로세스에서 다른 프로세스로 CPU 할당이 변경될 때 발생합니다. 컨텍스트 스위칭이 발생할 때 PCB에서 프로세스 상태, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보 등이 변경된다. 자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.배열을 활용합니다. 학년 별 교실에서 전학 혹은 기타 요인으로 인한 학생 정보를 수정, 삭제해야 하는 경우는 거의 일어나지 않고 학기 초 정해진 학생 정보 그대로 유지되는 경우가 많기 때문에, 정보 참조가 빠른 배열을 사용합니다. 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요. queue 자료 구조를 사용합니다. queue의 특징은 first in first out 입니다. 즉 들어온 순서대로 데이터를 처리하여 들어온 순서대로 데이터가 나갑니다. 이는 고객의 주문을 받고 순서대로 처리하려는 프로그램의 특징과 같습니다.
알고리즘 · 자료구조