블로그
전체 7#태그
- 인프런
- 인프런워밍업클럽
- 스터디2기
2024. 11. 07.
0
[인프런 워밍업 클럽 CS 2기] 후기
우연히 인프런에서 진행하는 스터디를 알게되어 신청하게 되었습니다.퇴근 후에 공부하는 것을 목표로 하였는데 백엔드 과정을 할지, CS를 할지 고민하다가 항상 공부하고 싶지 않은 CS..(자료구조, 운영체제) 스터디를 신청했습니다.스터디는 약 1달 동안 진행했는데 매주 강의를 듣고 매주 미션을 제출하는 형식이었습니다. 자료구조와 운영체제 모두 강의가 길지 않아 짧아서 부담스럽지 않게 들을 수 있었습니다. 특히나 운영체제는 항상 저에게는 항상 숙제 같았는데 (왜냐면 공부하기 싫었어요~ 책으로 공부하다가 중간에 그만두는,,, ) 그림으로 같이 공부하니까 쉽게 이해하고, 재밌게 공부했습니다. 특히나 캐릭터들이 귀엽고 효과음도 귀여웠습니다. 강사님이 신경 써서 강의를 만든 게 느껴졌습니다.중간에 귀찮았던 적도 많았지만, 퇴근 후에 강제로 공부하게 되어서 매우 다행이라고 생각했습니다. 이런 스터디를 만들어주신 인프런에게도 감사하고, 좋은 강의를 만들어주신 강사님에게도 감사합니다. 다음 3기가 오픈한다면 다른 코스로 다시 듣고 싶습니다.
인프런
・
인프런워밍업클럽
・
스터디2기
2024. 10. 20.
1
[인프런 워밍업 클럽 CS 2기] 3주차 발자국
수강내용가변분할방식 : 프로세스의 크기에 따라 메모리를 나누는 방식이다. 한 프로세스가 메모리에 연속된 공간에 할당되기 때문에 연속 메모리 할당 이라고도 한다. 장점으로는 연속되게 할당되기 때문에 더 크게 할당되서 낭비되는 공간인 내부 단편화가 없다. 단점으로는 외부 단편화가 발생한다. 가변 분할 방식을 세그멘테이션이라고 한다. 외부단편화에 대해서 설명하자면, 다음과 같이 빈공간이 있지만 연속된 공간이 아니라서 프로세스를 할당할 수 없는 상태를 말한다. 이때 외부 단편화가 발생한 공간을 합쳐주는 조각모음을 하면 된다. 하지만 조각모음을 하려면 현재 실행되고 있는 작업을 일시 중지해야되고, 메모리 공간을 이동시키는 작업을 해야하기 때문에 오버헤드가 발생한다.고정분할방식 : 프로세스의 크기와 상관없이 메모리 정해진 크기로 나눈다. 2MB로 분할된다고 가정하면 프로세스A는 구역 3개에 나눠서 할당된다. 그리고 1MB는 빈 공간으로 남는다. 프로세스C는 1MB에 할당되고, 1MB는 빈 공간으로 남는다. 이 방식은 한 프로세스가 메모리에 분산되어 할당되기 때문에 비연속 메모리 할당 이라고 한다. 장점으로는 구현이 간단하고 오버헤드가 적다. 단점으로는 공간이 낭비되는 내부단편화 가 발생한다. 가상 메모리 시스템에서 고정분할방식을 페이징이라고한다. 책의 페이지처럼 크기가 정해져 있다고 해서 붙은 이름이다. 프로세스 A가 50MB가 필요하다고 가정했을 때 메모리 공간이 부족해 10MB는 하드디스크의 스왑영역에 할당됐다. 그리고 프로세스 C,D의 크기가 분할된 크기보다 작아서 낭비공간이 존재할때 이를 내부단편화라고 부흔다. 하지만 이를 해결하는 방법은 없고, 분할되는 크기를 조절해서 내부단편화를 최소화한다. 버디 시스템은 가변분할방식와 고정분할방식을 혼합해 단점을 최소화한 방식이다. 버디 시스템은 2의 승수로 메모리를 할당한 방식이다. 2의 승수로 500B보다 작은 수를 나눌때까지 나눈다.500B이 256B보다 크기 때문에 계산을 멈추고 512B크기의 공간에 프로세스를 할당한다. 이때 12B가 낭비되지만 즉 내부단편화가 발생하지만, 프로세스가 끝나고 메모리에서 나가도 근접한 공간을 합치기 쉽다. 그 이유는 2의 승수로 동일하게 나눠 조립만하면 큰 공간이 만들어지기 때문에 조각모음보다 훨씬 간단하다. 따라서 이 방식은 가변분할처럼 프로세스 크기에 따라 할당되는 메모리 크기가 달라지고, 외부단편화를 방지하기 위해 메모리 공간을 확보하는 것이 간단하다. 또한 고정분할방식처럼 내부단편화가 발생하지만 많은 공간의 낭비가 발생하지는 않는다.회고3주동안 매일은 아니지만 꾸준히 자료구조와 운영체제 수업을 들었다. 가장 큰 수확은 운영체제에 대한 이해도가 높아진 것이다. 항상 운영체제는 우선순위가 뒤로 밀리는 감이 있었는데 이번 강의로 인해서 운영체제 지식이 높아져서 뿌듯하다. 아쉬운 점은 아무래도 자료구조인데 운영체제에 비해 자료구조 수강을 많이 못 했다. 이후에는 자료구조를 다시 복습하고 수강하면서 더 깊이있게 학습을 하고 싶다. 처음에는 스터디를 할까말까 고민했는데 역시 하길 잘했다는 생각이 든다. 좋은 강의 감사합니다. 😃
2024. 10. 20.
1
[인프런 워밍업 클럽 2기 - CS] 3주차 미션
운영체제메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.레지스터 : 가장 빠른 기억장소로 CPU 내에 존재한다. 컴퓨터가 꺼지면 데이터가 사라지기 때문에 휘발성 메모리하고 한다. CPU를 말할 때 32bit와 64bit는 레지스터의 크기를 말한다. 예를들어 32bi 레지스터를 가지고 있으면 32bit CPU라고 말한다. CPU는 계산을 할때 메인메모리에 있는 값을 레지스터에 가져와 계산을 한다. 그리고 메인메모리에 결과를 다시 저장한다. 캐시 : 휘발성 메모리로 엄청 빠른 레지스터에 비해 메인메모리은 느리다. 따라서 메인메모리에서 필요한 데이터를 미리 가져와 저장하는 곳이 캐시이다. 만약 CPU가 값을 요청해 레지스터로 값을 옮겨야 한다면 단계에 따라 가장 속도가 빠른 L1캐시를 보고, 그 다음 L2캐시 그리고 메인메모리를 확인해서 값을 가져온다. 메인메모리(RAM) : 실제 운영체제와 다른 프로세스들이 올라가는 공간이다. 전원이 공급되지 않으면 데이터가 지워지기 때문에 휘발성 메모리이다. 하드디스크나 SSD보다 속도는 빠르지만 가격이 비싸기 때문에 실행중인 프로그램만 올린다. 하드디스크 : 가격이 저렴하고 전원이 공급되지 않아도 데이터가 지워지지 않은 비휘발성 메모리이다.사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요? - 경계 레지스터(Bound Register)메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?세그멘테이션의 장점으로는 연속되게 할당되기 때문에 더 크게 할당되서 낭비되는 공간인 내부 단편화가 없다. 단점으로는 외부 단편화가 발생한다. 고정분할방식의 장점으로는 구현이 간단하고 오버헤드가 적다. 단점으로는 공간이 낭비되는 내부단편화 가 발생한다.CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요? - 스레싱이라고 한다. 스왑이 너무 많이 이루어져 CPU가 사용되지 않은 상태를 말한다.HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요. - 꼭 필요한 것은 아니지만 운영체제에서 데이터를 저장하는데 중요한 역할을 하기 때문에 필요하다.파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요? - free block list때문이다. 특정 파일을 삭제한다면 파일 시스템은 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고 free block list에 추가한다. 따라서 파일이 삭제한 것처럼 보여지지만 사용했던 블럭은 남아있기 때문에 포렌식으로 파일을 복구할 수 있다.자료구조와 알고리즘지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.버블정렬 : 구현이 간단하고 직관적이다. 효율성이 떨어진다. O(n²)선택정렬 : 구현이 간단하고, 추가적인 메모리를 사용하지 않는다. O(n²)삽입정렬 : 추가 메모리를 사용하지 않는다. 데이터가 많을 때 비효율적이다. O(n²)병합정렬 : 안정적인 정렬이며 . 큰 데이터를 다룰 때 효율적이다. 추가적인 메모리 공간이 필요하다. O(nlogn) 퀵정렬 : 평균적으로 가장 빠른 정렬로 실무에서 많이 사용한다. O(nlogn)메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.- 메모이제이션은 재귀로 구현이 가능하지만 메모리가 부족할시 스택 오버플로우가 발생할 가능성이 있기때문에 타뷸레이션을 사용할 것 같습니다.
2024. 10. 13.
1
[인프런 워밍업 클럽 2기 - CS] 2주차 발자국
강의 수강운영체제 : 운영체제의 CPU 스케줄링이나 데드락 문제는 항상 공부해도 금방 까먹어서 반복해서 공부해야하는 부분이었는데 강의의 그림으로 배우니 좀더 기억에 잘 남는 기분이 들었다. 다음은 프로세스 동기화에 대해서 간략이 요약했다. 프로세스 간 통신같은 컴퓨터 내에서 프로세스 간 통신을 할 수도 있고, 네트워크로 연결된 다른 컴퓨터 내의 프로세스와 통신을 할 수도 있다.파일와 파이프를 이용 - 파일을 이용하면 통신하려면 프로세스들이 하나의 파일을 이용해 읽고 쓰는 방법이다. 파이프를 이용하는 방법은 운영체제가 생성한 파이프를 통해 데이터를 읽고 쓰는 방법이다.쓰레드를 이용 - 한 프로세스 내에서 쓰레드 간 통신을 하는 방법으로 데이터 영역에 있는 전역변수나 힙을 이용하면 통신이 가능하다.운영체제가 제공하는 소켓으로 통신이나 다른 컴퓨터에 있는 함수를 호출할 수 있는 RPC(원격 프로시저 호출)로 통신공유자원과 임계구역프로세스 간 통신을 할때 공동으로 이용하는 변수나 자원을 공유자원이라고한다. 이 공유자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질 수 있다. 따라서 여기서 발생한 문제를 동기화 문제 라고 한다. 여러 프로세스가 동시에 사용하면 안 되는 영역을 임계구역(Critical Section)이라고 한다. 그리고 공유자원을 사용하기 위해 경쟁하는 것을 경쟁조건(Race Condition)이라고 한다.임계구역의 문제를 해결하기 위해서는 상호배제의 매커니즘이 필요하다. 상호배제의 요구사항은 3가지가 존재한다.주어진 시간에 임계영역에는 동시에 하나의 프로세스만 접근한다.여러 요청에도 하나의 프로세스 접근만 허용한다.임계구역에 들어간 프로세스는 빠르게 나와야한다.세마포어세마포어는 상호배제의 매커니즘 중 하나이다. 세마포어는 실제로 정수형 변수로 이 세마포어를 가지고 있어야만 공유자원에 접근이 가능하다. 세마포어는 실제로 여러개 일 수도 있다. 하지만 세마포어에도 단점이 존재하는데 함수의 순서를 이상하게 호출해 세마포어를 잘못 사용할 가능성이 존재한다.모니터모니터는 세마포어의 단점을 해결한 상호배제 매커니즘이다. 모니터는 운영체제가 아닌 프로그래밍 언어 차원에서 지원하는 방법이다. 대표적으로 자바에서 모니터를 지원한다. 자바에서 synchronized를 붙인 함수는 동시에 여러 프로세스가 실행시킬 수 없다. 즉 상호배제가 완벽하게 이루어진다. 자료구조 : 자료구조는 운영체제보다 구현을 하는데 좀 더 시간이 필요한 것 같다. 다음주에는 시간을 좀 더 투자해서 공부해야할것 같다. 미션미션을 통해서 복습할 수 있다는 점이 매우 좋다고 생각한다. 마지막 한주가 남았는데 마지막 한주도 강의 잘 수강하고 미션도 잘 마무리하고 싶다.
2024. 10. 13.
0
[인프런 워밍업 클럽 2기 - CS] 2주차 미션
운영체제FIFO 스케줄링의 장단점이 뭔가요? - First In First Out으로 먼저 들어온 작업이 먼저 나간다. 이 방식은 먼저 들어온 프로세스가 먼저 나가야 다음 프로세스가 실행될 수 있다. 장점으로 직관적이나 한 프로세스가 끝나야 다음 프로세스가 끝나기 때문에 늦게 들어온 프로세스는 기다려야한다. 또한 I/O 작업이 들어온다면 CPU는 I/O 작업이 끝날때까지 쉬고있기 때문에 CPU 사용률이 떨어지게 된다.SJF를 사용하기 여러운 이유가 뭔가요? 짧은 작업 먼저 실행한다는 뜻으로 이론적으로는 FIFO보다 성능이 더 좋으나 문제가 있다. 하지만 떤 프로세스가 얼마나 실행될지 예측하지 힘들고, Burst time이 긴 프로세스는 오랫동안 실행되지 않을 수도 있다. 즉 Burst time이 짧은 프로세스를 계속 먼저 실행되기 때문에 Burst time이 긴 프로세스는 실행이 되지 않아 불공평하게 느껴질 수 있다. 따라서 이런 문제때문에 사용하지 않는다.RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요? - 컨텍스트 스위칭이 자주 발생하여 오버헤드가 발생한다.운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?- CPU 사용량이 많으면 CPU Bound Process, 적으면 I/O Bound Process으로 판단한다.공유자원이란무엇인가요?- 프로세스 간 통신을 할때 공동으로 이용하는 변수나 자원을 공유자원이라고한다.교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요? - 밑의 조건이 동시에 충족되면 교착상태가 발생한다.상호배제 - 식사하는 철학자에서 포크가 이에 해당된다. 먼저 포크를 집었다면 그 포크는 다른 사람이 사용할 수 없는 리소스이다.비선점 : 프로세스 A가 리소스를 선점하고 있을때 프로세스B가 리소스를 빼앗길 수 없어야 한다. - 식사하는 철학자에서 철학자 A의 포크를 철학자 B가 뺏을수 없다.점유와 대기 : 어떤 프로세스가 리소스A를 가지고 있는 상태에서 리소스B를 원하는 상태여야 한다. - 식사하는 철학자에서 오른쪽 포크를 가진 상태에서 왼쪽 포크를 원하는 상태이다.원형대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있다. - 식사하는 철학자에서 서로가 서로의 포크를 원하는 상황이 원형을 이룬다. 자료구조와 알고리즘재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요? - 무한재귀호출이 발생하여 콜스택 메모리가 가득차서 종료된다.0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n) { // 재귀 로직 if (n == 0) return 0; if (n % 2 !== 0) { return n + sumOdd(n - 1); } else { return sumOdd(n - 1); } }
2024. 10. 06.
1
[인프런 워밍업 클럽 2기 - CS] 1주차 발자국
강의 수강운영체제 : 운영체제의 탄생배경과 프로세스, 쓰레드에 대해서 자세히 배웠다. 수업을 차근차근 들으면서 머릿속의 파편화된 지식이 하나로 모아져 정리되는 느낌이었다. 특히 프로세스와 쓰레드에 자세히 배울수 있어서 좋았다. 다음은 프로세스와 쓰레드에 대해서 배운 부분을 간략히 요약했다.프로세스와 쓰레드프로그램 : 어플리케이션이나 앱이라고 부르고, 윈도우에서는 .exe 파일의 모습을 하고있다.프로세스 : 하드디스크에 저장된 프로그램이 메모리에 올라가 실행중인 프로그램을 말한다. 프로세스의 영역은 다음과 같다. ( 프로세스가 메모리에 올라간다는 것은 밑의 각 영역이 메모리에 할당된다는 것을 의미)code 영역 : 자신을 실행하는 코드가 저장되어 있음.data 영역 : 전역변수와 static 변수가 저장되어 있음.stack 영역 : 지역변수, 함수 호출시 필요한 정보들이 저장되어 있음.heap 영역 : 프로그래머가 동적으로 메모리를 할당하는데 쓰임그리고 프로세스는 운영체제의 의해 관리된다. CPU 입장에서 동작과정은 다음과 같다. CPU는 0과 1과 같은 기계어만을 실행하는데, CPU내의 제어장치가 숫자와 5와 7을 메모리에 저장시킨다. 그리고 이 메모리에 저장된 값을 레지스터(edx,eax)로 가져온다. 그리고 제어장치가 레지스터에 저장된 5와 7을 가지고 더하라는 명령을 하면 산술 논리 연산장치가 두 숫자를 더하고 그 결과인 12를 eax 레지스터에 저장한다. 그리고 다시 제어장치가 eax레지스터에 저장된 12을 가지고 메모리에 저장한다.자료구조 : 기존에 안다고 생각했던 자료구조도 강의를 수강하면서 더 자세히 알게 되어서 좋았다. 다음 주에는 좀더 시간을 투자해 자료구조를 집중적으로 공부하고 싶다. 추가적으로 다음주에는 평일부터 학습범위에 맞게 수업을 수강하고싶다. 미션문제를 읽고 먼저 답안보다 배운 것을 기억하려고 노력했고, 후에도 기억이 안 나는 부분은 복습을 통해서 답안을 작성했다. 확실히 미션이 있어서 복습을 할 수 있다는 점이 좋았다.
2024. 10. 05.
0
[인프런 워밍업 클럽 2기 - CS] 1주차 미션
운영체제1.while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?답변 : 인터럽트 방식. CPU는 입출력 관리자에게 명령을 내리고 자기는 다른 작업을 한다. 그리고 입출력관리자는 작업이 완료되면 CPU에게 알리고, CPU는 ‘신호’를 받아 인터럽트 서비스 루틴(ISR)을 실행시켜 작업을 완료한다. 따라서 주기적으로 체크하지 않는 폴링방식보다 신호를 받아 처리하는 인터럽트 방식이 더 효과적이다.프로그램과 프로세스가 어떻게 다른가요?답변 :프로그램은 어플리케이션을 말하고, 이 프로그램이 메모리에 올라간 상태를 프로세스라고 한다.멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요? 답변 : 멀티 프로그래밍은 메모리에 여러 개의 프로세스가 올라온 상태를 말하고, 멀티프로세싱은 CPU 입장에서 CPU가 여러개의 프로세스를 처리하는 것을 말한다.운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?답변 : PCB를 사용한다. PCB는 Process Contorl Block으로 연결리스트라는 자료구조로 이루어져 있고, PCB에는 포인터, 프로세스상태, 프로세스 ID등 프로세스의 관련된 정보가 저장된다.컨텍스트 스위칭이란 뭔가요? 답변 : 컨텍스트 스위칭은 프로세스를 실행하는 중에 프로세스의 상태를 저장하고, 다른 프로세스의 상태값으로 교체하는 작업이다. 실행중인 작업을 PCB에 저장하고, 실행될 프로세스의 PCB 내용대로 CPU가 다시 세팅된다.자료구조와 알고리즘여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요. 답변 : 배열을 사용할 것입니다. 배열은 모든 학생의 정보를 차례대로 저장할 수 있고, 학생마다 번호를 부여했을 때 인덱스를 사용해서 빠르게 조회가 가능하기 때문입니다.여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요. 답변 : 큐를 사용할 것입니다. 큐는 First In First Out으로 들어온대로 주문을 처리하기 때문입니다.