블로그

윤지영

인프런 워밍업 클럽 2기 - CS 미션 3

# 운영체제1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터 > 캐시 > 메인메모리(RAM) > 보조저장장치(HDD,SSD)오른쪽으로 갈수록 속도는 느리고, 가격이 저렴해짐.레지스터 - cpu 내부의 저장장치로, cpu가 계산하기 위해 데이터를 임시 저장 캐시 - cpu와 메모리 사이의 속도 차이를 줄이기 위해 데이터를 임시로 저장해두는 곳 cpu 계산에 필요할만한 데이터를 미리 가져옴메인메모리 - 실제 운영체제와 프로세스들이 올라가는 공간전원이 꺼지면 데이터도 사라지는 휘발성 메모리 공간  보조저장정치 - SSD, HDD 등으로 데이터 영구저장전원이 꺼져도 데이터가 남는 비휘발성 메모리2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?경계레지스터 : CPU 내부에 존재하는 레지스터로 메모리관리자가 프로세스가 경계를 벗어났는지 검사하고, 만약 벗어났다면 그 프로세스를 종료시킨다.3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?가변 분할 방식 : 프로세스가 크다면, 메모리도 크게 할당장점 : 연속된 공간에 할당되어, 더 크게 할당되어 낭비되는 공간 '내부 단편화'가 없음단점 : '외부단편화' 발생 -> 공간이 남는데 연속된 공간이 아니라 할당 할 수 없음.고정 분할 방식 : 일정 크기로 분할하여, 프로세스 크기와 상관없이 메모리 할당 장점 : 구현이 간단하며 , =오버헤드가 적음단점 : 크기보다 더 할당되는 '내부 단편화' 발생 4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?스레싱5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?꼭 필요하진 않다. '실행'만 시키는 용도로는 꼭 필요하지 않지만, 컴퓨터를 사용하기 위해서는 필요합니다. 이유를 함께 적어주세요.6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?'파일 삭제시 실제 파일이 삭제되는 것이 아닌, 그 파일의 헤더만 지우고, Free Block List에 추가하게된다. 즉 해당 데이터에 새로운 데이터가 덮어지기 전까지는 파일을 복구할 수 있다. # 자료구조와 알고리즘1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블 정렬O(n²)장점 : 이해와 구현이 쉬움단점 : 성능이 좋지 않음선택정렬O(n²)장점: 이해와 구현이 쉬움단점 : 성능이 좋지 않음삽입정렬O(n²)장점: 이해와 구현이 쉬움단점 : 성능이 좋지 않음병합정렬O(n log n)장점 : 성능이 좋음단점 : 정렬 배열을 저장한 메모리 공간 필요퀵정렬O(n log n)장점 : 성능이 좋음 단점 : 피벗설정을 잘못할 경우 O(n²)의 성능이 될 수 있음. 저장할 공간이 추가로 필요2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요타뷸레이션을 사용하겠습니다. '메모리가 부족' 환경에서는 재귀 호출로 발생하는 오버헤드가 방지하기 위해 하양식 알고리즘인 타뷸레이션을 사용하겠습니다.  

워밍업클럽cs

윤지영

인프런 워밍업 클럽 2기 - 발자국 2주차

회고이번주는 기간 맞춰서 들은 걸 넘어서, 중간에 휴일이 껴있어서 먼저 듣기도 했다. 그리고, 남는 시간에 다른 공부를 하는 100점에 110점!👏👏👏 다음주도 100점 만점에 105점을 하고 싶다.마지막 주도 화이팅!  강의 수강운영체제cpu 스케줄링, 프로세스 동기화, 데드락, 메모리에 대해 학습하였다. 공유자원과 데드락이 정말 재밌었다. 공유자원에 다양한 만약? 이런 경우라면 하고 생각해볼 수 있는 경우가 많았다.세마포어의 해결 하는 부분에서 모니터락에 대해서 설명해주셨는데만약, 인스턴스 단위 락을 걸고싶다면? 이런석으로도 사용할 수 있다는걸 배웠다.   public class Health { private int health = 100; synchronized void increase(int amount) { health += amount; } synchronized void decrease(int amount) { health -= amount; } }이외에도 해당 모니터락은 범위 별로 다양하게 사용할 수 있는데, 이런 락을 많이 걸게되면, 성능상 문제가 생길 요지가 있으니 적잘한 락을 거는게 매우 중요할 것 같다.  알고리즘알고리즘에 대해 본격적으로 학습하였다.특히 재귀적으로 생각하기가 도움이 많이 되었다. 사실 알고리즘을 공부하면서, 재귀 함수를 사용하는 경우가 많은데 이해가기 좀 어려웠다 ㅠㅠ 이번에 강의를 들으면서 어떤 상황에는 재귀적으로 사용하면 좋을지 도움이 되었다.

워밍업클럽cs

윤지영

인프런 워밍업 클럽 2기 - CS 미션 2

 운영체제1. FIFO 스케줄링의 장단점이 뭔가요?장점 : 단순하고 직관적이다.단점 : 늦게 도착한 짧은 프로세스가, 앞의 긴 프로세스를 기다려야합니다.2. SJF를 사용하기 여러운 이유가 뭔가요?긴 실행 시간을 가진 프로세스가 무한정으로 대기하게 될 수 있습니다.3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?컨텍스트 스위칭이 너무 자주일어나, 프로세스 처리량 < 컨텍스트 스위칭 을 처리하는 양이 많아지는 문제가 발생할 수 있습니다.4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?슬라이스 크기를 오버해 CPU를 사용한다면 CPU Bound Process일 확률이 높고, CPU를 사용하다 반납하는 경우는 I/O Bound Process일 확률이 높습니다.5. 공유자원이란무엇인가요?프로세스나 스레드가 동시에 접근하여 사용할 수 있는 자원 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?상호 배제 : 한 리소스를 점유했다면, 다른 프로세스에 공유 되지 않음.비선점 : 프로세스가 리소스를 사용하고 있으면 다른 프로세스가 빼앗아갈 수 없음.점유와 대기 : 프로세스가 리소스를 점유한 채로 다른 자원을 기다림.원형 대기 : 점유와 대기를 하고 있는 프로세스들의 관계가 순환을 이루고 있음. 자료구조와 알고리즘1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?재귀 호출이 끝나지 않고, 결국 콜스택 메모리가 가득차서 종료됨.  2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n) { // 재귀 로직 if (n == 0) return 0; if (n % 2 !== 0) { return n + sumOdd(n - 1); } else { return sumOdd(n - 1); } } console.log(sumOdd(10)); // 25

워밍업클럽cs

윤지영

인프런 워밍업 클럽 2기 - 발자국 1주차

강의 수강운영체제 운영체제는 컴퓨터를 동작시키기 위해 존재하며, 그를 위한 CPU, 스레드, 프로그램, 프로세스, CPU 스케줄링 등에 대해서 알게 되었다. 간혹 이런이야기를 들은적 있다, 컴퓨터의 성능이 느려진다면 크롬을 의심해 봐라, 크롬은 너무 무겁다. 그래서 컴퓨터가 느려진다 싶을 때, cpu를 확인해 보면 크롬이 어마어마하게 커져있는 경우가 대부분이었다. (그리고 크롬 탭 종료🤣) 근데 사실 크롬은 무겁다라는 생각은 했지만, 그 이유는 생각해 본 적이 없었는데 이 강의를 들으면서 프로세스에 대해 생각해보면서 깨달았다. 크롬이 무거운 이유, 그럼에도 내가 크롬을 사용하는 이유. 그렇다 프로세스는 빠르니까... 그러면서 내가 프로그램을 개발한다면, 어느 방법을 사용해야할까라는 생각을 가질 수 있는 좋은 계기가 되었다.  자료구조자료구조에 대해서 배웠다. 해당 자료구조는 배열, 연결리스트, 스택, 큐, 덱, 해시테이블, 셋에 대해 학습하였으며, 해당 자료구조를 js로 구현하여 흐름을 파악하였다. 사실 알고리즘은 듣고싶은 강의는 아니였다. 어느정도 안다는 생각을 가지고 있었기 때문이었는데, 이것은 나의 자만...이었다. 들으면서 한번 더 정리할 수 있고 한번 더 생각할 수 있는 계기가 되었던 것 같다. 또한 구현해본적 없는 js로 구현하는 점이 새롭게 느껴졌다. 회고일단 미션과 발자국을 기간 내에 해냈다는 점을 칭찬하고 싶다. 잘했다 나😘다만... 금요일의 경우 당일 강의를 듣지 못하고, 주말에 대체했다는 점 아쉬웠다. 다음주에는 꼬박꼬박 강의를 듣고, 주말에는 한번 더 복습할 수 있는 시간으로 사용하면 좋겠다. 미션미션은 대체로 간단한 문제라, 배웠던 내용을 학습하면서 정리하며 적었다.다만 알고리즘의 경우 생각을 좀 해던것 같다. 조건을 토대로 어떤 알고리즘을 사용하면 좋을지 고민을 했는데, 일단 선택지를 삭제해가는 소거법으로 결론을 도출했다. 이 알고리즘은 성능이 문제가 생길 수 있고, 이 알고리즘은 이 부분보다 어느부분이 별로고, 라는 생각을 하면서 제외하면서 선택했다.  회고위의 알고리즘을 생각해면서 재밌었기 때문에 알고리즘을 좀 더 많이 파악하여, 생각할 수 있는 선택지를 늘리고 싶다.

워밍업클럽cs

윤지영

인프런 워밍업 클럽 2기 - CS 미션 1

운영체제while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?  인터럽트를 사용합니다. 인터럽터 방식은 작업이 완료됬을 때 신호를 받아 CPU가 인터럽트 서비스 루틴을 실행시켜 작업을 완료합니다. 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램은 디스크 등에 저장된 명령문의 집합입니다. (수동적 존재)프로세스는 프로그램이 메모리에 올라가 있는 상태입니다. (실행중인 프로그램) 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍은 '메모리 관점' 에서 메모리에 여러가지 프로세스가 올라온 것을 의미합니다.멀티프로세싱은 메모리에 올라와있는 여러 프로레스를 시분할처리로 CPU가 짧은 시간 교대로 실행하는 것을 의미합니다. 4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?PCB 데이터 구조를 사용합니다. 각 프로세스의 상태, 프로그램 카운터, CPU 레지스터, 메모리 관리 정보 등이 포함되어 있습니다. 5. 컨텍스트 스위칭이란 뭔가요?운영체제는 CPU를 효율적으로 사용할 수 있도록 여러 프로세스를 번갈아가며 CPU를 할당합니다. 이떄 각 프로세스의 작업 진행 사항을 유지할 수 있도록 실행중인 PCB 를 저장하고, 실행될 기존의 PCB 내용을 CPU에 세팅하는 것을 의미합니다. 자료구조와 알고리즘1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.헤시테이블을 선택하겠습니다. 학생에게는 구분을 위한 고유정보(학생번호) 등이 존재할 것입니다. 저장하고 열람한다는 조건을 따졌을 때, 해시테이블은 조회, 삽입 , 삭제 모두 O(1) 의 시간복잡도를 가져 , 빠르게 저장하고 열람할 수 있을 것입니다. 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐를 선택하겠습니다. 주문의 조건인 순서대로 처리하는 FIFO 방식인 큐가 적합한 자료구조라고 생각됩니다. 이 경우 주문의 삭제, 삽입은 모두 O(1)의 시간 복잡도를 가지게 됩니다. 물론 덱을 사용해도 성능상 차이는 없겠지만, 이 코드를 공유하게 될 동료들에게 '순서대로 처리한다' 라는 결론을 큐를 통해 직관적으로 전달할 수 있기 때문입니다.

워밍업클럽cs

채널톡 아이콘