[인프런 워밍업클럽 CS 2기] 1주차 발자국
워밍업클럽 시작하고 처음 작성하는 발자국입니다
강의 듣고 정리하다보니 일주일이 금방 지나가 버렸습니다
-이번주에 공부한 내용의 키워드-
운영체제
운영체제 개요, 역사, 구조
컴퓨터 하드웨어 구조, 컴퓨터의 부팅과정,
인터럽트
프로그램&프로세스, 멀티프로그래밍&멀티프로세싱
PCB, 프로세스 상태, 컨텍스트 스위칭, 프로세스 생성&종료, 쓰레드
CPU스케줄링, 다중큐, 스케줄링목표, FIFO
알고리즘&자료구조
시간복잡도
배열, 스택, 큐, 덱
해시테이블, 셋
-이번주에 공부한 내용 요약-
운영체제
컴퓨터의 다양한 기능 수행을 위해 필요한 "운영체제"는 프로세스 관리와 메모리 관리, 하드웨어 관리, 파일시스템 관리를 합니다
어떻게 하면 CPU를 최대한 많이 사용할 수 있을까라는 고민 덕분에(?) 운영체제는 더욱 복잡하게 발전이 되었고 그렇게 해서 오늘날의 운영체제가 되었습니다.
프로그램을 메모리 위에 올려서 실행하는데 이를 프로세스라고 부릅니다. 메모리 위에 올라간 프로그램은 운영체제가 관리합니다. 프로세스 정보는 PCB가 가지고 있어요.
오늘날의 운영체제는 멀티 프로그래밍과 멀티 프로세싱을 합니다. CPU가 시분할 처리로 여러 프로세스를 교대로 실행하죠
프로세스는 생성, 준비, 실행, 대기, 완료 상태의 5가지 상태로 구분할 수 있습니다. 입출력 요청한 프로세스가 대기상태가 되는데 대기상태인 동안 다른 프로세스에게 CPU를 할당합니다. 입출력작업이 끝나면 대기 상태였던 프로세스에게 CPU를 할당해서 CPU를 쉬지 않고 굴립니다.
프로세스 여러개를 교대로 실행하는데 실행하는 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 것이 Context Switching입니다. 이때 pcb내용이 변경됩니다.(pcb에 프로세스 정보 있으니까요)
프로세스 수가 늘어날 수록 무거워지기 때문에 이를 해결하기 위해 '쓰레드'가 있습니다.(이 때 왜 크롬을 무겁다고 하는지 알 수 있었습니다;;;)
프로세스 여러개 실행할 때 모든 프로세스에 CPU를 할당하고 해제하는 CPU스케줄링이 이루어집니다. 스케줄러는 CPU스케줄링을 할 때 여러 사항들을 고려해서 '잘' 스케줄링을 해야합니다.
스케줄링 관리할 때 '다중큐'로 관리가 됩니다.(큐에는 PCB(프로세스 정보 가진 녀석)가 들어갑니다.)
CPU스케줄링 알고리즘에는 여럿이 있지만 가장 초반의 알고리즘으로 FIFO(먼저 들어오면 먼저 CPU할당받는) 방식이 사용되었습니다.
알고리즘&자료구조
프로그램은 자료구조와 알고리즘으로 구성됩니다.
자료구조: 데이터가 어떻게 저장되고 사용될까
알고리즘: 문제를 '확실하게' 해결하는 방법
좋은 알고리즘으로 문제를 해결하고 싶은데 일반적으로 '알고리즘 속도'를 성능의 척도로 사용합니다. 그래서 '시간복잡도'를 사용합니다.
성능평가에는 여러 기준이 있는데 최악의 경우를 따지는 '빅-오(bigO)' 방식을 가장 많이 사용합니다.
빅-오 표기법으로 표기할 때는 계산에 가장 많은 영향을 미치는 항만 표기합니다(O(n), O(n^2))
배열은 모든 프로그래밍 언어에서 기본적으로 제공하는 자료구조입니다.
읽고 쓰고 참조에는 너무 좋은데 데이터 삽입/삭제할때 성능이 안좋아요
배열의 문제점을 해결해 줄 수 있는 것이 바로 '연결리스트'입니다.
노드를 만들어서 데이터 저장하고 다른 노드와 연결한 구조입니다.
데이터 삽입/삭제가 배열보다 쉬워요
근데 데이터가 떨어져있어서 바로 접근은 못해요
스택: FILO구조로 먼저 들어간 데이터가 나중에 나옵니다.
연결리스트를 사용해서 한쪽(head)에만 데이터를 삽입하고 제거하면 구현가능합니다.
큐: FIFO구조로 먼저 들어간 데이터가 먼저 나옵니다
운영체제에서 사용되기도 합니다.(FIFO Scheduling)
연결리스트로 구현가능합니다.(이중연결리스트 사용) head에서 데이터 추가하고 tail에서 데이터를 제거합니다.
덱: 데이터 삽입/제거를 head/tail 두 군데에서 자유롭게 합니다.
얘 이용하면 stack, queue모두 구현 가능해요
해시테이블
해시=맵=해시맵=딕셔너리
해시와 테이블(표)이 합쳐진 자료구조입니다.
테이블의 인덱스를 만들어주는 '해시함수'가 중요한 역할을 합니다.
데이터 탐색, 삽입,삭제가 쁠지만 공간효율성이 안좋은 점이 단점입니다.
셋
데이터의 중복을 허용하지 않은 자료구조로 해시테이블을 사용하기도 합니다(그래서 '해시셋'으로 불리기도!)
해시테이블의 value는 사용하지 않고 key만 사용해서 구현합니다.
-간단한 이번 주 회고-
강의가 다들 짧아서 금방 듣고 끝날 줄 알았는데 내용이 생각보다 많고(1차당황), 정리할 것도 많고(2차당황) 그래서 시간이 생각보다 오래 걸렸습니다. 정리하는 것을 하루만 밀려도 양을 감당하기 어려우니 하루하루 꾸준하게 정리하는 것이 최선입니다. 다행히도 그날 해야하는 것은 그날 끝내서 공부할 것이 밀리지 않아 다행입니다.
이번 주에 시간관리가 중요함을 깨달았으니 다음 주는 이번 주의 경험을 바탕으로 더 잘 공부하고 정리할 수 있을 것 같아요. 다음 주 내용도 만만치 않으니 하루하루 꾸준하게 공부하며 내 것으로 만드는 작업을 해야겠습니다. 복습도 꾸준하게 해서 잊지 말아야겠어요.
댓글을 작성해보세요.