![[인프런 워밍업 클럽 스터디 3기 - CS전공지식] 1주차 발자국](https://cdn.inflearn.com/public/files/blogs/d9fa76b1-19c2-4b54-9eb0-07a6c8a71351/inflearnStudy-thumbnail.png)
[인프런 워밍업 클럽 스터디 3기 - CS전공지식] 1주차 발자국
운영체제
운영체제에 대하여
운영체제가 하는 일에는 프로세스/메모리/하드웨어/파일 시스템 관리가 있다.
운영체제의 핵심은 커널이고, 커널은 프로세스와 메모리, 저장장치를 관리하는 핵심적인 기능을 담당한다.
커널에는 직접 접근할 수 없기 때문에, 사용자와 어플리케이션은 인터페이스로 시스템 콜을, 하드웨어는 인터페이스로 드라이버를 사용한다.
CPU는 중앙처리장치로, 산술논리연산장치, 제어장치, 레지스터로 구성되어 있다.
메모리의 종류는 RAM과 ROM 두가지가 있는데,
RAM : 전력이 끊기면 데이터를 잃어버리기 때문에, 메인 메모리로 사용된다.
ROM : 전력이 끊겨도 데이터를 보관하기 때문에, 컴퓨터 부팅과 관련된 바이오스가 저장된다.
인터럽트 : 입출력 작업을 진행할때, 입출력 작업이 완료되면, CPU에게 신호를 주고 CPU는 그 신호를 받아 인터럽트 서비스 루틴을 실행시켜 작업을 완료하는 방식.
비동기적으로 동작하기 때문에 성능면에서 폴링방식보다 훨씬 좋다.
프로세스와 쓰레드
프로그램 : 어플리케이션/앱/.exe 파일과 같은 것.
프로세스 : 하드디스크에 저장된 프로그램이 메모리에 올라갔을 때 실행 중인 프로그램.
프로세스의 구조 :
Code 영역 / Data 영역 / Heap 영역 / Stack 영역
멀티프로그래밍 : 메모리에 여러개의 프로세스를 올려서 처리 하는 것
멀티프로세싱 : 여러개의 CPU에 여러개의 프로세스를 올려서 처리하는 것
PCB : 프로세스의 정보를 가지고 있음.
연결리스트 자료구조로 저장되어 있음.
PCB구조 : 포인터 / 프로세스 상태 / 프로세스 ID / 프로그램 카운터 / 레지스터 정보 / 메모리 관련 정보 / CPU 스케줄링 정보
프로세스 상태는 생성/준비/실행/대기/완료의 다섯가지 상태를 가지고 있다.
컨텍스트 스위칭 : 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업
스위칭이 일어날때 PCB 변경되는 값은 프로세스 상태/프로그램 카운터/레지스터 정보/메모리 관련 정보가 있다.
컨텍스트 스위칭 발생 이유 : CPU 점유 시간이 끝나거나, I/O 요청이 있거나, 다른 종류의 인터럽트가 있을때 발생한다.
프로세스의 생성 과정은 프로그램의 코드영역과 데이터영역을 메모리에 로드하고 빈 Stack과 빈 Heap을 만들어 공간을 확보하고 PCB를 만들어 값을 초기화해준다.
운영체제가 부팅이 되고 0번 프로세스가 생성될때 딱 한번만 실행된다.
나머지 모든 프로세스는 0번 프로세스를 복사하여 사용한다.
쓰레드 : 프로세스 내에 존재하고 1개 이상이 있을 수 있다.
프로세스 내의 PCB, 코드, 데이터, 힙 영역을 공유하고, 스택은 각각 가지고 있다.
운영체제가 작업을 처리하는 단위다.
CPU스케줄링
CPU스케줄링 : 운영체제가 프로세스에게 CPU의 할당과 해제를 하는 것.
운영체제는 PCB의 우선순위를 참고하여 준비상태의 다중큐에 넣는다. 이때 CPU스케줄러는 준비상태의 다중큐를 참조해서 어떤 프로세스를 실행시킬지 결정한다.
FIFO : 먼저 들어온 프로세스가 먼저 실행되는 방식
장점 : 단순하고 직관적
단점 : 대기시간이 길고, CPU 사용율이 떨어짐
SJF : 짧은 작업 먼저 실행하는 방식. 프로세스의 작업 시간을 추정하기 힘든 문제점 때문에 구현하기 힘들다.
RR : CPU가 일정한 시간만 부여하여 그 시간만큼만 실행되게 하는 알고리즘. CPU할당 시간이 끝나면 해당 프로세스는 강제로 큐의 가장 마지막으로 밀려남.
FIFO의 단점을 해결하여 나온 알고리즘
FIFO와 RR의 평균대기시간이 비슷하다면, RR 알고리즘이 좀 더 비효율적임.
MLFQ : 우선순위를 가진 큐를 여러개 준비, 우선순위가 높으면 타임슬라이스 크기가 작고, 우선순위가 낮으면 타임 슬라이스 크기가 큼. 타임 슬라이스 크기를 오버해서 강제로 CPU를 뺏긴다면 해당 프로세스의 우선순위를 한 단계식 아래로 내림.
운영체제에서 가장 일반적으로 쓰이는 알고리즘.
자료구조와 알고리즘
개요
자료구조 : 데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타냄
알고리즘 : 어떤 문제를 해결하기 위한 확실한 방법
시간복잡도 : 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간
시간을 측정하는 방식이 아닌 코드에서 성능에 많은 영향을 주는 부분을 찾아서 실행 시간을 예측하는 것.
코드에서 성능에 많은 영향을 주는 부분은 "반복문"이다.
자료구조
배열 : 모든 프로그래밍 언어에서 기본적으로 제공하는 자료구조
장점 : 읽기 쓰기와 같은 참조에는 O(1)의 성능을 가짐
단점 : 크기 예측이 힘들기 때문에 메모리 낭비가 발생할 수 있음. 데이터 삽입과 삭제가 비효율적
연결리스트 : 메모리 공간에 데이터와 다음 노드를 가리키는 Next를 가지는 노드를 분산해 할당하고, 이 데이터를 서로 연결해주는 것
장점 : 배열의 초기 크기를 알아야할 필요가 없다.
단점 : 배열의 인덱스 참조처럼 접근하려면, O(n)의 성능을 가짐.
스택 : 먼저 들어간 데이터가 나중에 나오는 규칙을 가지고 있는 자료 구조
큐 : 먼저 들어간 데이터가 가장 먼저 나오는 규칙을 가지고 있는 자료 구조
덱 : 데이터 삽입과 제거를 head와 tail 두군데서 자유롭게 할 수 있는 자료 구조
해시테이블 : 해시함수로 테이블의 인덱스를 새로 만드는 것
해시함수 : 어떠한 계산을 하여 인덱스를 부여하는 함수
장점 : 빠른 데이터 읽기, 삽입, 삭제
메모리를 많이 차지함, 좋은 해시 함수의 구현이 필수
셋 : 데이터의 중복을 허용하지 않는 자료 구조
회고
칭찬하고 싶은 점 : 자료구조의 코드를 이해하려고 혼자 직접 그려보고 코드도 작성해보면서 노력하였다.
아쉬웠던 점 : 이번주는 일정 조율을 좀 잘못하여, 거의 벼락치기마냥 공부해서 정신이 없었다. 그래서인지 원래도 정리를 못하지만 더욱더 정리가 되지 않아 좀 답답했다.
보완하고 싶은 점 : 다음엔 좀 더 정리를 깔끔하게 하고 싶다.
다음주의 목표 : 다음주는 벼락치기식이 아닌 스케줄대로 차근차근히 공부해서 지식을 흡수하고 싶다.
댓글을 작성해보세요.