블로그
전체 62024. 10. 20.
1
[인프런 워밍업클럽 CS 2기] 마지막주 발자국
1. 학습 내용퀵정렬, 메모이제이션, 타뷸레이션, 가상메모리와 입출력 장치 그리고 파일시스템을 학습했다. (+감자님의 라이브!) 2. 마지막 회고벌써 마지막이라니 사실 실감은 좀 안 난다. 강의 완강이라는 걸 내가 해보다니 이거 꿈인가 ; 개발을 하면서 공학 지식과 알고리즘 공부를 이제서야 하는 내가 미친 짓이었다는 걸 뼈저리게 느꼈던 3주다 .. 이걸 이제서야 ..? 운좋게 개발자로 경력을 쌓으면서 더 성장해야 한다는 걸 많이 느꼈고 부족함을 채워보고자 신청했던 스터디였는데 많은 걸 얻고 간다. 부족한 걸 알고도 실천하지 않다가 진짜 채워지는 과정을 경험하니 이제 다른 어떤 것도 쉽게 도전할 수 있을 것 같다. 사실 다른 분들처럼 성실하게 참여한 건 아니었지만, 그럼에도 끝을 마무리할 수 있었음에 의의를 두기로 했다. 정신 승리여도 정신 패배 보다는 승리가 나으니까 ~ 근데 완주가 가능한 건 아무래도 감자님의 재밌는 강의가 한 몫 한 게 아닐까 싶다. 기회가 된다면 다른 강의들도 또 보고 싶고, 추후에 업데이트 되는 강의도 들어보고 싶다. 다음 스터디도 있다면 꼭 참여해보려고 한다. 즐기면서 진행한 스터디였다. 진심으로!
2024. 10. 20.
1
[인프런 워밍업클럽 CS 2기] 마지막 주 미션
운영체제1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터: 휘발성 메모리, CPU 내부 메모리로 ALU의 계산을 위한 값들을 저장하는 용도. 캐시 메모리: 휘발성 메모리, 레지스터와 RAM사이의 병목 현상을 줄이기 위한 메모리RAM: 휘발성 메모리, 프로그램을 실행 시, 해당 메모리에 올라가서 프로세스가 됩니다.보조저장장치: 비휘발성 메모리, HDD, SSD, 파일 저장 공간 2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계 레지스터입니다. 3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?[가변 분할 방식]장점: 공유와 각 영역에 대한 메모리 접근 보호가 편리하고, 영역 별로 분할되기 때문에 관리가 쉽습니다.단점: 외부 단편화가 발생합니다.[고정 분할 방식]장점: 외부 단편화를 해결하고, 효율적인 메모리 관리가 가능합니다.단점: 내부 단편화와 특정 영역에 대한 공유, 권한 부여가 어렵습니다. 4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱입니다. 제한된 물리 메모리에 의해 스왑 영역에 데이터가 많이 저장되고 Page Fault가 많이 발생하게 되면 스왑을 하는데 이 작업에 의한 오버헤드로 CPU 사용률이 떨어지며, 이를 통해 CPU 스케줄러에 의해 CPU 사용률을 올리기 위해 메모리에 더 많은 프로세스를 올리며 CPU 사용률이 0%에 가깝게 떨어지게 된다. 5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?이유를 함께 적어주세요.메모리에서 비휘발성의 특성을 가진 메모리는 HDD나 SSD 밖에 없어서 운영체제를 저장할 공간이 필요하기 때문입니다. 6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?빈 공간을 모아둔 free block list를 가지고 있기때문에 삭제 시 파일 정보를 모두 지우는 게 아니라 파일 테이블의 헤더를 삭제하고 free block list에 추가합니다. 자료구조와 알고리즘1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬 : O(n²)선택 정렬 : O(n²)삽입 정렬 : O(n²)병합 정렬 : O(nlogn)퀵 정렬 : 평균 O(nlogn) / 최악 O(n²) 2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.타뷸레이션을 사용하겠습니다. 반복문을 사용해서 순차적으로 계산하기 때문에 오버헤드가 적고 빠른 동작이 가능하기 때문입니다.
2024. 10. 13.
1
[인프런 워밍업클럽 CS 2기] 2주차 발자국
1. 전반적인 학습내용CPU 스케줄링 알고리즘(FIFO, SJF, RR, MLFQ), 프로세스 간 동기화(공유자원 등), 데드락과 메모리,그리고 알고리즘에서 재귀 내용과 정렬 등을 학습했다. 2. 일주일 간의 회고핑계를 대보자면 이번주는 좀 너무 정신없는 일이 많아서 강의를 날별로 규칙적으로 듣지는 못 했다.. 몰아서 듣다보니까 생각보다 이해할 때 더뎌지는 걸 느껴서 좀 놀랬다. 근데 운영체제랑 자료구조를 같이 공부하니까 몰아서 듣더라도 예전에 혼자 공부할 때보다, 처음 개발 공부를 시작할 때보다 이해가 더 수월하게 되는 것 같아서 너무 좋았다. 스터디가 끝나고 두 세번 더 각 강의를 돌려서 들어야 할 것 같다. 익숙해질 때까지 여러 번에 걸쳐서 복습이 필요할 듯 하다. 3. 다음주 목표2주동안 배운 내용 총정리 한번 하기, 알고리즘 연습 시작해 보기, 강의 밀리지 말자 .. ^00^
2024. 10. 13.
1
[인프런 워밍업클럽 CS 2기] 2주차 미션
운영체제1. FIFO 스케줄링의 장단점이 뭔가요?스케줄링 큐에 들어온 순서대로 CPU 할당받기 때문에 장점은 단순하고 직관적이지만, 한 프로세스가 완전히 끝나야 다음 프로세스가 작업을 시작할 수 있기 때문에 긴 시간이 걸리는 작업 등을 기다려야 합니다. 게다가 I/O 작업이 있다면 CPU는 I/O 작업이 끝날 때까지 쉬고 있어서 CPU 사용률이 떨어집니다. 2. SJF를 사용하기 여러운 이유가 뭔가요?어떤 프로세스가 얼마나 실행될 지 예측 어렵습니다. BurstTime이 긴 프로세스는 또 아주 오랫동안 실행되지 않을 수 있습니다. 3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요? 컨텍스트 스위칭이 너무 자주 일어나서 타임 슬라이스에서 실행되는 프로세스의 처리량보다 컨텍스트 스위칭 처리하는 양이 더 커져버립니다. == "오버헤드가 너무 커집니다." 4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?프로세스가 실행 중에 스스로 CPU를 반납하면 CPU 사용이 적은 거니까 I/O Bound Process일 확률이 크고, 반대로 타임 슬라이스 크기를 오버해서 CPU 스케줄러에 의해 강제로 뺏기는 상황이면 CPU Bound Process일 확률이 크다. 5. 공유자원이란무엇인가요?프로세스 간 통신 시 공동으로 이용하는 변수, 파일 등을 말합니다. 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호배제비선점점유, 대기원형대기 자료구조와 알고리즘1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?콜 스택이라는 메모리 공간이 가득 차버려서 자동으로 종료되게 됩니다. 2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요. function sumOdd(n){ // 재귀 로직 if (n
2024. 10. 06.
1
[인프런 워밍업클럽 CS 2기] 1주차 발자국
1. 전반적인 학습내용운영체제의 역사부터 전반적인 흐름, 프로세스와 CPU 스케줄링에 대해서 배웠고, 자료구조 및 알고리즘 파트에서는 일반적인 배열(+Js 배열)과 스택, 연결리스트, 큐, 해시테이블 등에 대해서 배웠다. 2. 일주일 간의 회고사실 난 강의 수집가다 ^00^,, 초반엔 잘 듣다가도 금방 흐지부지되는 경우가 되게 많았었는데, 강제적으로 스터디 클럽에 들어가서 어떻게서든 강의를 수강해야 하는 과정이 일단 너무 좋았다. 물론 간혹가다가 일정이 발생해서 강의가 조금씩 밀리는 경우가 생기긴 했지만,, 그럼에도 이번주 목표하는 바를 다 학습했다. 특히 자료구조 학습 시에는 강의를 보고 코드를 그냥 따라치지 않고 먼저 구현해본 후에 강의를 재생했다. 게다가 그림자료가 너무 친절해서 자료구조를 그냥 먹기 쉽게 다 으깨서 떠먹여주는 것 같았다 ,, 강의 하나 수강할 때마다 이해가 너무 잘 돼서 되게 짜릿했음그리고 너무 부끄럽지만 자료구조나 운영체제 등을 제대로 공부해본 적이 없다. 자료구조나 알고리즘은 .. 그냥 코딩테스트를 위해서 하는 거 아닌가라는 안일한 생각을 했었다. 이번주 강의를 들으면서 소프트웨어 개발을 위해서 기본 CS 지식은 진짜 너무 당연한 것이라는 걸 뼈저리게 느껴서 반성과 부끄러움을 많이 느낀 한 주였다. 그래도 간만에 강의 들으면서 의욕이라는 게 확 올라온 듯, 처음 개발을 배우기 시작할 때로 돌아간 것 같아서 좋았다. 수료할 때까지 쭉 꾸준하게 달려야겠다. 3. 다음주 목표학습한 내용 바탕으로 1일 1커밋 꼭 해보기
2024. 10. 02.
1
[인프런 워밍업클럽 CS 2기] 1주차 미션
운영체제1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?비동기 방식인 인터럽트를 사용해야 합니다. 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램은 애플리케이션, 앱, .exe와 같이 저장장치에 저장된 집합체들을 의미합니다.프로세스는 실행 중인 프로그램을 의미하고, 메모리에 프로그램이 올라갔을 때를 말합니다. 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 메모리에서 여러 프로세스가 올라가서 실행되는 것이고,멀티프로세싱은 CPU에서 여러 프로세스가 처리되는 것입니다. 4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?PCB를 사용하여 관리합니다. 5. 컨텍스트 스위칭이란 뭔가요?특정 프로세스 실행 중에 다른 프로세스를 실행하기 위해 해당 정보를 저장하고, 다른 프로세스로 상태값을 교체하는 것을 말합니다. 자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?이유를 함께 적어주세요. 해시테이블을 사용하겠습니다. 키 값을 이용해서 관리하고 접근과 수정이 용이하기 때문입니다 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.주문은 들어온 순서대로 처리됩니다.이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?이유를 함께 적어주세요.주문이 들어온 순서대로 처리해야 한다면 선입선출인 FIFO, 큐를 선택하겠습니다.