🔥새해맞이 특별 라이브 선착순 신청🔥

인프런 워밍업 클럽 스터디 2기 - CS 3주차 발자국

인프런 워밍업 클럽 스터디 2기 - CS 3주차 발자국

강의 수강

운영체제

일주일 간의 학습했던 내용

  • 메모리의 종류

    • 레지스터, 캐시, 메인메모리, HDD/SSD

    • 속도 : 레지스터 < 캐시 < 메인메모리 < HDD/SSD

  • 메모리의 주소

    • 메모리를 컴퓨터에 연결하면 0부터 시작하는 주소공간이 있다. -> 물리주소공간

       

    • 이와 다르게 사용자 관점에서 바라보는 주소 공간 -> 논리 주소 공간

    • 메모리에 운영체제를 위한 공간이 따로 존재한다. -> 사용자 프로세스가 운영체제를 침범하지 못하도록 경계 레지스터를 만듬

    • 경계 레지스터 : 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료시킨다.

 

  • 메모리 할당 방식

    • 가변 분할 방식 (세그멘테이션)

      • 프로세스가 크면 메모리도 크게 할당

      • 한 프로세스가 메모리에 연속된 공간에 할당되기 뗴문에 연속 메모리 할당이라고 함

      • 장점 : 내부 단편화가 없음

         

      • 단점 : 외부 단편화 발생

    • 고정 분할 방식 (페이징)

      • 프로세스 크기와 상관없이 메모리를 할당

      • 비연속 메모리 할당

        .

      • 장점 : 구현이 간단하고 오버헤드가 적다.

      • 단점 : 내부 단편화 발생

    • 버디 시스템

      • 2의 승수로 메모리를 분할해 메모리를 할당하는 방식

      • 2의 승수로 동일하게 메모리를 분할해서, 반대로 조립만 하면 큰 공간이 만들어지기 때문에 조각모음보다 간단하다.

      • 외부 단편화를 방지하기 위해 메모리 공간을 확보하는 것이 간단하다.

         

      • 내부 단편화가 발생하긴 하지만, 많은 공간의 낭비가 발생하지는 않는다.

 

  • 가상메모리

    • 최대 메모리 크기가 4GB일 때, 운영체제를 포함해서 많은 프로세스는 어떻게 실행할까?

       

      • 가상메모리 시스템은 물리메모리 내용의 일부를 하드디스크에 있는 스왑영역으로 옮기고

      • 처리가 필요할 때 물리 메모리로 가져와 실행시키기 때문에, 모두 실행 가능

    • 논리주소에서 물리주소로 변환할 때 사용하는 기법

      • 세그멘테이션

      • 페이징

      • 페이지드 세그멘테이션

    • 페이징 교체 정책

      • FIFO

      • 앞으로 가장 오랫동안 쓰이지 않을 페이지 선택 (Optimum) -> 구현 불가능, 성능 비교용도로 쓰임

      • LRU -> Optimum과 비슷한 성능

    • 스레싱과 워킹셋

      • 스레싱 : CPU 사용률을 높이기 위해 멀티 프로그래밍 정도를 올렸지만 스왑작업의 시간 등으로 오히려 사용률이 더 떨어지는 현상

      • 워킹셋 : 현재 메모리의 올라온 페이지는 다시 사용할 확률이 높기 때문 하나의 세트로 묶어서 메모리에 올림

 

  • 입출력장치

     

    • 캐릭터 디바이스

      • 데이터 전송단위 : 글자

      • 마우스, 키보드, 사운드카드

    • 블록 디바이스

      • 데이터 전송단위 : 블록

      • 하드디스크, SSD, 그래픽카드

    • 메인보드에 있는 버스로 연결됨 -> 하나의 버스는 Address 버스, Data 버스, Control 버스로 이루어져 있음

 

  • 파일시스템

    • 순차 파일 구조

      • 파일의 내용이 연속적으로 이어진 형태

      • 장점 : 공간의 낭비가 없고 구조가 단순

         

      • 단점 : 데이터를 삽입/삭제할 때 시간이 많이 걸림

    • 직접 파일 구조

      • 해시함수를 통해 저장위치를 결정하는 파일구조

         

      • 데이터 접근 굉장히 빠름

         

      • 해시함수에 따라 저장공간 낭비 될 수 있음

    • 인덱스 파일 구조

      • 인덱스 테이블을 통해 블록 번호를 알아낸 후

      • 순차 데이터의 블록 번호로 접근해서 파일에 접근하는 방

 

자료구조와 알고리즘

일주일 간의 학습했던 내용

  • 성능이 좋지 않지만, 구현이 단순한 정렬

    • 버블정렬

    • 선택정렬

    • 삽입정렬

  • 구현이 복잡하지만, 성능이 빠른 정렬 -> 분할정복 기법 사용

    • 병합정렬

    • 퀵정렬

  • 메모이제이션

     

    • 계산 결과를 저장해서 여러 번 계산하지 않도록 하는 기법

    • 재귀를 통한 하향식 계산 방식에 적합함

    • 속도가 빨라지지만, 메모리를 더 사용하게 된다.

  • 타뷸레이션

    • 상향식 계산 방식으로 계산에 필요한 모든 값을 테이블에 저장하는 방식

    • 메모리를 더 사용하긴 하지만, 재귀를 통한 방식이 아니기 떄문에 메모이제이션보다는 덜 사용한다.

 

미션

 

미션을 해결한 과정

미션을 해결하면서 고민을 했던 2문제가 있습니다.

  1. HDD나 SSD는 필수?

처음에는 당연히 필수라고 생각했습니다.

부트로더가 저장되어 있는 메모리가 무조건 있어야 컴퓨터가 실행될 수 있다고 생각했기 때문입니다.

그런데 부트로더를 담을 수 있는 USB 같은 저장장치가 있다면 실행이 가능하다고 생각이 들어서 수정했습니다.

  1. 메모이제이션 or 타뷸레이션?

처음에 '메모리가 부족한 시스템' 이라는 문구를 못 보고 메모이제이션을 사용해야 한다고 생각했는데

뒤늦게 확인하고.. 다시 답변을 작성했습니다.

메모리가 부족하다면 시스템이 비정상 종료될 수 있는 심각한 오류를 발생시킬 수 있고,

이게 현실에서 일어난다면 회사가 난리가 날 것 같다는 생각을 했습니다..

그런데 개발 서버에서 충분한 부하를 주면서 성능 테스트를 해보고, 메모리에 이상 없다는 결과가 나온다면 메모이제이션도 사용해볼만 하다는 생각도 했습니다.

회고

우선 알고리즘, 운영체제 강의를 완강하게 돼서 기쁩니다!

만약 혼자 강의를 수강했다면, 3주 기간 안에 완강은 못 했을 것 같습니다.

제가 워밍업 클럽에 참여하게 된 계기는 부족한 CS 지식을 채우기 위해서도 있었지만, 여러 개발자들로부터 동기부여를 받고 싶어서 지원했었습니다.

그런 저에게 이번 워밍업 클럽이 어땠냐고 묻는다면.. 저는 200% 만족합니다.

최근 들어서 정말 저의 나태함을 느끼고 있었는데 러너분들이 올려주시는 미션과 발자국, 그리고 디스코드에서 남겨주시는 질문들이 저를 계속 책상에 앉게 만들어줬던 것 같습니다.

그리고 강의가 너무 재밌었습니다. 학부생 때 들었던 CS 강의보다 3배는 더 재밌었던 것 같아요.

워밍업 클럽이 끝나도 항상 조금씩이라도 공부하는 습관을 유지하려고 합니다. 더 이상 나태함에 빠지고 싶지 않아요 😢

저에게 동기부여해주신 러너분들, 그리고 좋은 강의 제작해주신 감자님 모두 감사드립니다.

 

댓글을 작성해보세요.

채널톡 아이콘