[인프런 워밍업클럽 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가 데이터)
회고
칭찬하고 싶은 점
강의를 허투루 듣지 않기 위해서 강의 노트를 작성하면서, 좀 더 궁금한 점이 생기면 의문점을 작성해두고 추가로 찾아보는 등 디테일한 이해를 위해 노력했다.
아쉬웠던 점
휴일이나 주말 등 강의를 들을 시간이 넉넉한 때를 생각하면서 당일에 들어야하는 분량을 미루는 일이 잦았다.
보완해야할 점
퇴근 후 피곤하더라도 완전히 그날 강의를 안듣기 보다는, 한 강의라도 들으면서 꾸준히 강의를 수강하는 습관을 들이도록 노력하자!
댓글을 작성해보세요.