인프런 워밍업 클럽 2기 - CS 전공지식 스터디 1주차 발자국
운영체제 1주차 학습 요약
운영체제
운영체제는 컴퓨터를 유연하게 동작시키기 위해 필요하다.
운영체제가 하는일
프로세스를 관리 (여러 프로그램을 동작시킴)
메모리를 관리 (프로그램은 메모리에 올라감)
하드웨어 관리 (사용자의 하드웨어에 대한 직접 접근을 막음)
파일 시스템 관리 (하드디스크에 많은 파일들을 효율적으로 저장&관리)
운영체제의 구조
커널 - 프로세스와 메모리, 저장장치를 관리하는 핵심적인 기능을 담당
인터페이스 - 사용자가 시스템과 상호작용을 도와주는 외부 인터페이스
시스템 콜 - 커널은 사용자 애플리케이션과 커널이 소통할때 사용되는 내부 인터페이스 (커널을 보호)
드라이버 - 하드웨어와 커널간의 인터페이스
폰노이만 구조
CPU와 메모리를 분리하고 프로그램을 메모리에 올려서 실행하는 구조
인터럽트
인터럽트는 폴링 방식의 단점을 해결하기위해 CPU가 현재 진행중인 작업을 일시중단하고 외부에서 발생한 이벤트를 처리하기위해 서비스루틴을 실행하는 매커니즘
프로세스
프로그램이 메모리에 올라가서 CPU 할당의 대상이 되는 능동적인 존재
프로세스의 구조
코드영역(실제 코드), 데이터영역(전역변수, 정적변수), 스택영역(지역변수, 함수), 힙영역 (객체 등, 런타임시 동적인 메모리를 할당할 수 있는 공간)
컴파일 과정
test.c -> 전처리기 -> test.i -> 컴파일러 -> test.s(어셈블리어) -> 어셈블러 -> test.o(기계어)
-> 링커(라이브러리 연결) -> test.exe
프로세스 컨트롤 블록 (PCB)
운영체제는 여러개의 프로세스를 관리하고 공평하게 CPU를 할당하기 위해 프로세스 정보를 담은 PCB를 만들고 저장함
식별자, 프로세스 상태, 프로그램카운터, 레지스터 정보등을 저장
프로세스 상태
생성, 준비, 실행, 대기, 완료
컨텍스트 스위칭
프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스를 저장하고 다른 프로세스의 상태값으로 교체하는 작업
쓰레드
한 프로세스 내에서 동시에 각자 실행될 수 있는 작업 흐름의 단위
기본적으로 프로세스 1개에는 1개의 쓰레드가 존재
쓰레드끼리는 스택영역을 제외한 다른 영역은 공유해서 사용, 프로세스에 할당된 Virtual Memory로 공간이 제약됨
공유하는 영역을 통해 메모리 낭비를 줄이고 쓰레드끼리 소통할때 비용이 적게 들지만, 안정성이 떨어짐
CPU 스케쥴링
운영체제는 CPU를 여러 프로세스에 할당/해제 하는 것을 CPU 스케쥴링이라고 함
다중 큐
준비, 대기 상태의 프로세스는 다중 큐 자료구조에서 관리
다중큐에는 정확하게는 프로세스의 정보를 가진 PCB가 저장
CPU 스케쥴링 알고리즘
FIFO (First In First Out)
스케쥴링 큐에 들어온 순서대로 CPU를 할당 받는 방식
한 프로세스가 완전히 끝나야 다음 프로세스가 시작되고, I/O작업시 I/O작업이 끝날때까지 CPU가 대기하는 단점이 있음
프로세스의 BURST TIME에 따라 성능차이가 심하게 나기 때문에 잘 쓰이지 않고, 일괄처리 시스템에서 쓰임
알고리즘 & 자료구조 1주차 학습 요약
알고리즘
어떤문제를 해결하기 위한 구체적이고 확실한 방법
자료구조
데이터를 효율적으로 저장하고 사용할 수 있도록 정리하는 방법
상황에 맞는 적절한 자료구조를 선택하고 이에 맞는 적절한 알고리즘을 적용할 수 있어야 한다.
시간복잡도
더 좋은 알고리즘이란 무엇일까? 메모리를 더 적게 사용하는 것? 속도가 빠른 것?
입력값이 달라지더라도 동일하게 알고리즘의 속도를 표현하는 방법이 시간복잡도
입력값에 따른 변화의 추이를 나타내는 방법중에 최악의 경우를 기준으로 표기하는 빅 오 표기법이 가장 많이 사용됨
배열
동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 자료구조
읽기, 쓰기와 같은 참조에는 O(1)의 성능을 가짐
그러나 데이터 삽입, 삭제에서는 데이터 복사, 이동등이 일어나 비효율적임
또한, 고정된 크기로 배열을 생성해야함
연결리스트
배열의 단점은 연속된 메모리공간이 필요하다는 것과 초기 배열의 크기를 모르면 메모리가 낭비될 수 있다는 점임
연결리스트에 데이터를 추가한다면 빈 메모리 공간에 데이터를 생성하고 연결만 해주면 됨
연결리스트는 요소 접근시 첫번째 노드부터 이동하면서 찾아야함, O(N)
배열 VS 연결리스트
배열은 메모리 크기가 고정이고, 연속된 주소에 할당되는 단점, 그러나 인덱스 접근으로 인해 참조는 매우 빠름
연결리스트는 초기 크기를 알 필요없이 데이터를 생성하고 연결만 해주면 됨
대신 인덱스 접근이 느림 (첫번째 노드부터 이동하면서 찾아야 함)
스택
먼저 들어간 데이터가 가장 마지막에 나가는 First In Last Out의 자료구조
큐
먼저 들어간 데이터가 가장 먼저 나오는 First In First Out의 가료구조
덱
데이터 삽입과 제거를 앞과 뒤 모두에서 자유롭게 사용할 수 있는 자료구조
덱을 이용하면 스택과 큐 모두 구현 가능
해시테이블
해시 함수에 의해 생성된 해시값을 인덱스로 사용하여, key, value 쌍으로 저장됨
해시충돌
서로 다른 입력값이 동일한 해시값을 갖는 상황
체이닝
충돌이 발생한 경우, 동일한 해시값을 갖는 여러개의 항목을 연결리스트로 저장 (실제로는 레드블랙트리)
해시테이블의 장.단점
장점 : 빠른 데이터 읽기, 삽입, 삭제 - O(1)의 성능
단점 : 메모리를 많이 차지함 (좋은 해시함수는 필수)
셋
데이터의 중복을 허용하지 않는 자료구조 (순서를 보장하지 않고 중복을 허용하지 않음)
회고
1주일동안 CS 전공지식 스터디를 하면서 부족한 것을 채우면서 많이 공부하게 된 것 같아요. 다른사람들이 어떻게 공부하고 있는지, 그리고 미션을 통해 가장 중요하게 알고 넘어가야 하는 부분들을 집어주셔서 확실히 개념이 잡히는 것 같아요.
스터디를 진행하면서 전공자임에도 스스로 알고 있다라고 생각했던 것들이, 생각보다 잘 모르고 있구나 라는 반성을 많이 하게 된 것 같습니다. 스터디와 강의로 통해서 개념을 다시 정리할 수 있게되어 너무 좋았어요. 특히, 운영체제 부분 프로세스의 상태 전환 하는 부분에서 많이 배운 것 같네요.
개발을 할 때 필요한 기본 지식들, 알고리즘 그리고 자료구조들은 평생 사용하는 것들인데 스터디를 통해 많은 것들을 얻는 것 같아요. 이제 2주 남았는데요. 짧다면 짧은 기간이지만 함께 달려서 완주했으면 좋겠습니다.
댓글을 작성해보세요.