워밍업 클럽(CS) 첫 스타트🐣 1주차 발자국🐾
전공자 만큼의 지식을 갖기 위한 나의 첫걸음, 인프런 워밍업 클럽과 함께❤
비전공자에 공무원인 내가 개발자가 되기를 꿈꾸며 시작한 인프런 워밍업클럽!
진짜 먼 여정이 남았지만 첫 시작을 이번 워밍업클럽과 하게되어 너무 즐겁고,
그 첫 발자국을 이렇게 남깁니다.
강의 한줄평✏
'감자'님의 강의는 깔끔한 화면과 깔끔한 설명으로 공부하면서 눈도 즐거운 완벽한 강의다.
1주차 발자국📓
그림으로 쉽게 배우는 자료구조와 알고리즘
프로그램 = 자료구조 + 알고리즘
자료구조
데이터가 어떤 구조로 저장되고 어떻게 사용되는 지를 나타냄
예시 : 변수, 배열
알고리즘
어떤 문제를 해결하기 위한 확실한 방법
알고리즘의 속도 => 성능의 척도 "시간복잡도"
특정 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간
코드에서 성능에 많은 영향을 주는 부분 -> "반복문"
성능 평가
Big-Ω 최선의 경우 한 번에 찾음
Big-Ο 최악의 경우 배열의 길이만큼 걸림 ✔
Big-Θ 평균의 경우 배열의 길이 중간만큼 걸림
배열
일반적인 배열
배열을 선언할 때 배열의 크기를 알려준다.
예시
int arr[10] = {1, 2, 3, 4, 5};
운영체제는 숫자 10개가 들어갈 수 있는 연속된 빈 공간을 찾아 1,2,3,4,5 할당
운영체제는 배열의 시작 주소, 즉 1이 들어간 주소만 기억
배열의 인덱스 참조는 길이에 상관없이 한 번에 가져오기 때문에 Ο(1)의 성능을 가진다.
읽기 쓰기 참조 성능 Good, 데이터의 삽입 삭제 성능 Bad
자바스크립트의 배열
상황에 따라 연속적, 불연속적으로 메모리 할당
불연속적으로 할당된 메모리는 내부적으로 연결
연결리스트(Linked List)
크기를 모르면 메모리가 낭비될 수 있다는 배열의 단점을 해결하기 위해 등장
저장하려는 데이터를 메모리 공간에 분산해 할당하고 데이터들을 서로 연결
노드(Node)를 만들어서 수행 , 노드 = 데이터를 담는 변수 + 다음 노드를 가리키는 변수
연결리스트는 데이터들이 전부 떨어져 있기 때문에 바로 접근 X
데이터 참조 성능 : O(n)
추상자료형 : 어떠한 데이터와 그 데이터에 대한 연산
연결리스트의 추상자료형
모든 데이터 출력 printAll()
모든 데이터 제거 clear()
인덱스 삽입 insertAt(index, data);
마지막 삽입 insertLast(data);
인덱스 삭제 deleteAt(index);
마지막 삭제 deleteLast();
인덱스 읽기 getNodeAt(index);
"Node" 클래스 선언, "LinkedList" 클래스 선언
class Node{ constructor(data, next = null){ this.data = data; # 자바스크립트에서 클래스 내의 변수는 프로퍼티 this.next = next; } } class LinkedList{ constructor(){ this.head = null; this.count = 0; } insertAt(index, data){ if(index > this.count || index < 0){ throw new Error("범위를 넘어갔습니다."); } let newNode = new Node(data); if(index==0){ newNode.next = this.head; this.head = newNode; } else { let currentNode = this.head; for(let i = 0; i < index - 1; i++){ currentNode = currnetNode.next; } newNode.next = currentNode.next; currentNode.next = newNode; } this.count++; } }
스택(stack)
First In Last Out(FILO)
먼저 들어간 데이터가 나중에 나오는 규칙
head에만 삽입, 제거
큐(Queue)
First In First Out(FIFO)
먼저 들어간 데이터가 먼저 나오는 규칙
head에 삽입하고 tail에서 제거
덱(Deque)
데이터의 삽입과 제거를 head와 tail 두 군데서 자유롭게 할 수 있는 자료구조
해시 테이블(Hash Table)
해시(Hash), 맵(Map), 해시맵(HashMap), 딕셔너리(Dictionary)
Key만 알면 Value에 Ο(1)의 성능으로 읽기 가능
삽입, 수정, 삭제까지 Ο(1)의 성능
셋(set)
데이터의 중복을 허용하지 않는 자료구조
그림으로 쉽게 배우는 운영체제
운영체제가 하는 일
프로세스 관리
메모리 관리
하드웨어 관리
파일시스템 관리
운영체제의 역사
1940년도
애니악
1943년부터 미군지휘하에 펜실베니아 대학교에서 개발
최초 목적 : 미사일 탄도계산
스위치와 배선 연결을 통한 프로그래밍
1950년도 초반
진공관과 전선으로 만들어진 논리 회로를 아주 작은 크기로 만든 직접 회로(IC) 개발
현대적인 컴퓨터 모습 갖춤
CPU, 메모리 있었지만 키보드와 모니터는 없었음
펀치카드 이용, 프로그래머가 카드에 구멍을 뚫어 프로그래밍
1950년도 중후반
"싱글스트림 배치시스템"
프로그래머가 여러개의 펀치카드를 오퍼레이터에 전달, 컴퓨터는 순서대로 실행
입출력 I/O 디바이스 컨트롤러를 만들어 입출력 중에도 CPU가 계산할 수 있도록 만듦
한계 : 입출력에도 CPU를 기다려야 하는 작업이 있음
1960년도
"시분할 시스템"
프로그램을 동시에 여러개 사용
여러 사용자들이 여러 터미널로 하나의 컴퓨터에 접근하여 사용 -> 파일시스템 등장
UNIX
AT&T벨 연구소에서 C언어로 유닉스 운영체제 개발
멀티 프로그래밍, 다중 사용자, 파일시스템 구현
메모리 침범 이슈 발생
베이스 레지스터 : 프로그램의 시작 주소 저장, 모든 프로그램은 0번지에서 실행한다고 가정
1970년도 이후
개인용 컴퓨터의 시대 시작
애플의 매킨토시, 마이크로소프트의 MS-DOS가 많이 사용
운영체제의 구조
운영체제의 핵심은 커널
폰 노이만 구조
CPU 스케줄링
운영체제는 모든 프로세스에게 CPU를 할당/해제하는데 이를 CPU 스케줄링이라고 한다.
CPU 스케줄링에서 스케줄러(운영체제)가 고려해야 할 사항
첫번째, 어떤 프로세스에게 CPU 리소스를 줘야하는가?
두번째, CPU를 할당받은 프로세스가 얼마의 시간동안 CPU를 사용해야하는가?
스케줄링 목표
리소스 사용률
오버헤드 최소화
공평성
처리량
대기시간
응답시간
스케줄링 알고리즘
FIFO(First In First Out)
SJF
RR
MLFQ
댓글을 작성해보세요.