[인프런 워밍업클럽 CS 2기] 1주차 발자국👣

[인프런 워밍업클럽 CS 2기] 1주차 발자국👣

1주차 학습 내용

운영체제

  • 운영체제의 구조

    • 커널

      • 프로세스, 메모리, 저장 장치 등을 관리

      • 사용자가 직접 접근하지 못하고, 인터페이스로만 접근 가능

    • 인터페이스

      • GUI(Graphic User Interface)

      • GLI(Command Line Interface)

    • 시스템콜

      • 어플리케이션은 시스템콜을 활용해 커널에 접근

    • 드라이버

      • 하드웨어와 커널의 인터페이스

  • 컴퓨터 하드웨어와 구조

    • 메인보드 : 다른 하드웨어를 연결하는 장치로, 장치 간 데이터 전송은 메인보드의 버스가 담당

    • CPU(Central Processing Unit, 중앙 처리 장치)

      • 산술논리 연산 장치(ALU) : 실제 데이터 연산 담당

      • 제어 장치(Control Unit) : 모든 장치들의 동작을 지시, 제어

      • 레지스터: CPU 내에서 계산을 위해 임시로 보관

    • 메모리

      • RAM(Random Acess Memory) : 전원을 끄면 데이터가 날아감, 메인 메모리로 사용, 랜덤한 위치의 어떤 데이터를 읽든 속도가 동일

      • ROM(Read Only Memory) : 전원을 꺼도 데이터 보관 가능, 컴퓨터 부팅 관련 바이오스 저장

  • 부팅과정

    • 컴퓨터 전원 누름 -> ROM에 저장된 BIOS 실행 -> 주요 하드웨어 이상 여부 체크 -> 이상이 없으면 부트 로더 실행 -> 운영체제를 메모리로 불러오기 -> 바탕화면이 보임

  • 인터럽트

    • CPU 입출력 명령이 들어왔을 때 언제 완료되는지 계속 확인해야하는 폴링 방식의 단점을 해결한 것

    • CPU가 입출력 관리자에게 명령을 내리고 자기는 다른 작업함 -> 입출력이 완료되면 CPU에게 신호를 주고 CPU는 신호를 받아서 ISR 실행시켜 작업 완료

  • 프로그램과 프로세스

    • 프로그램

      • 하드디스크와 같은 저장장치에 저장된 명령문의 집합

      • 저장 장치만 사용하므로 수동적인 존재

    • 프로세스

      • 하드디스크에 저장된 프로그램이 메모리에 올라갔을 때, 즉 실행 중인 프로그램

      • 메모리, CPU 사용 및 입/출력 등 능동적인 존재

      • code, data, stack, heap 영역으로 구성

  • 멀티프로그래밍과 멀티프로세싱

    • 멀티프로그래밍 : 메모리에 여러 개의 프로세스가 올라온 것

    • 멀티프로세싱 : CPU가 여러 개의 프로세스를 처리하는 것

  • PCB(Process Control Block)

    • 프로세스의 정보를 가지고 있는 것으로, 연결리스트 자료구조로 저장됨.

    • 포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU 스케줄링 정보 등을 저장

  • 프로세스 상태

    • 생성 -> 준비 -> 실행 -> *(대기 -> 준비 -> 실행 ->) 완료

      • 대기 상태: 입출력 요청이 들어오면 입출력이 완료될때까지 기다리는 상태

  • 컨텍스트 스위칭

    • 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업

    • 컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경됨

  • 쓰레드

    • 요구하는 작업의 수가 늘어나면 프로세스의 수가 늘어나고, 프로세스의 수만큼 PCB, 코드, 데이터, 스택, 힙 영역을 만들어줘야해서 무거워짐 => 이를 해결하기 위해 쓰레드 고안

    • 프로세스 내에 1개 이상 존재하며, PCB, 코드, 데이터, 힙 영역을 공유함

  • CPU 스케줄링

    • 운영체제가 모든 프로세스에게 CPU를 할당하거나 해제하는 작업

      • 어떤 프로세스에게 CPU 리소스를 줄지, 얼마의 시간동안 CPU를 할당할지를 고려함

    • Burst : 한 작업을 연속적으로 처리하는 것으로, 보통 작업 처리에 필요한 시간을 의미 (CPU Burst, I/O Burst)

  • 스케줄링 목표

    • 리소스 사용률 높이기, 오버헤드 최소화, 공평성, 처리량, 대기 시간, 응답 시간

    • 서로 상반되는 상황이 있기 때문에 사용하는 시스템에 따라서 목표를 다르게 설정

  • CPU 스케줄링 알고리즘 - FIFO

    • First In First Out, 먼저 들어온 작업이 먼저 나간다

    • 프로세스의 Burst Time에 따라 성능차이가 심하게 나므로 현대 운영체제에서 잘 쓰이지 않고 일괄처리 시스템에서 쓰임


    알고리즘

  • 자료구조와 알고리즘

    • 자료구조 : 데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타냄

    • 알고리즘 : 어떤 문제를 해결하기 위한 확실한 방법

    • 자료구조에 따라 알고리즘이 달라지므로, 상황에 맞는 적절한 자료구조를 선택하고 이에 맞는 알고리즘을 적용할 줄 알아야함

  • 시간복잡도

    • 최선 : 빅-오메가, 평균 : 빅-세타, 최악 : 빅-오

    • 주로 빅-오 표기법을 많이 사용함

    • 성능 : O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!)

    • 표기법

      • 계산에 가장 많은 영향을 미치는 항만 표기

      • 상수는 큰 의미 없음

  • 배열

    • 일반적인 배열

      • 크기가 정해져있고, 정해진 크기만큼 연속적인 메모리 공간에 값을 할당

      • 운영체제는 가장 첫번째 주소만 기억함

      • 참조 성능은 O(1), 삭제, 삽입 성능은 좋지 않음

    • 자바스크립트의 배열

      • 상황에 따라서 연속적, 불연속적으로 메모리 할당하는데 대부분 불연속적으로 할당(내부적으로 연결)

    • 장점

      • 읽기, 쓰기와 같은 참조에는 O(1)의 성능을 가짐

    • 단점

      • 크기 예측이 힘들기 때문에 메모리 낭비가 발생할 수 있음

      • 데이터의 삽입, 삭제가 비효율적임

  • 연결리스트

    • 배열의 단점을 해결하기 위해 저장하려는 데이터를 메모리 공간에 분산해 할당하고, 데이터를 서로 연결해주면 됨 => Node를 만들어 수행

    • Node의 구조 : data를 담는 변수, 다음 노드를 가리키는 변수

    • 장점

      • 배열에서 초기 크기를 알아야하는 단점이 없음

      • 중간에 데이터를 삽입 혹은 삭제하려면, 특정 노드의 다음 가리키는 노드만 바꿔주면 됨

    • 단점

      • 데이터들이 전부 떨어져있기 때문에 바로 접근하기 힘듦 => O(n)의 성능

  • 스택(Stack)

    • First In Last Out(FILO)으로, 먼저 들어간 데이터가 가장 나중에 나오는 규칙이 있음

    • Redo, Undo 기능, 괄호짝 검사 등에 사용

  • 큐(Queue)

    • First In First Out(FIFO)로, 먼저 들어간 데이터가 먼저 나오는 규칙이 있음

    • 계산대에 줄을 서는 경우, 맛집 대기줄 등 일렬로 기다리는 줄을 생각하면 됨

  • 덱(Deque)

    • 데이터의 삽입과 제거를 head와 tail 두 군데서 자유롭게 할 수 있는 자료구조

  • 해시테이블(Hash Table)

    • 해시(Hash), 맵(Map), 해시맵(HashMap), 딕셔너리(Dictionary)라고도 불림

    • 해시와 테이블이 합쳐진 자료구조

      • 테이블을 그냥 배열에 저장하면, 낭비되는 공간이 발생할 수 있음

      • 테이블의 기존 인덱스를 순차적인 인덱스로 만들기 위해 어떤 계산을 하는 함수를 해시라고 함

    • key만 알면 value에 O(1)의 성능으로 읽기가 가능

    • 삽입, 삭제, 수정도 O(1)

    • 장점

      • 빠른 데이터 탐색, 삽입, 삭제를 할 수 있음

    • 단점

      • 공간의 효율성이 좋지 않음

      • 좋은 해시 함수의 구현이 필수적임

  • 셋(Set)

    • 데이터의 중복을 허용하지 않는 자료구조

    • 해시 테이블을 이용하므로 쉽게 구현 가능

      • 해시 테이블을 사용한다고 해서 Hash Set이라고도 불림

      • value 값은 사용하지 않고 key만 사용해서 구현함(key가 데이터)


    회고

    칭찬하고 싶은 점

    강의를 허투루 듣지 않기 위해서 강의 노트를 작성하면서, 좀 더 궁금한 점이 생기면 의문점을 작성해두고 추가로 찾아보는 등 디테일한 이해를 위해 노력했다.

아쉬웠던 점

휴일이나 주말 등 강의를 들을 시간이 넉넉한 때를 생각하면서 당일에 들어야하는 분량을 미루는 일이 잦았다.

보완해야할 점

퇴근 후 피곤하더라도 완전히 그날 강의를 안듣기 보다는, 한 강의라도 들으면서 꾸준히 강의를 수강하는 습관을 들이도록 노력하자!

댓글을 작성해보세요.

채널톡 아이콘