인프런 워밍업 클럽 스터디 2기 - CS 1주차 발자국
강의 수강
운영체제
일주일 간의 학습했던 내용
운영체제가 하는 일 : 프로세스 관리, 메모리 관리, 하드웨어 관리, 파일 시스템 관리
운영체제의 역사
1. 1950년대 에니악 : 스위치와 배선을 연결해서 프로그래밍, 입출력 중간에 계산 불가
2. 1950년대 초 : 직접 회로가 만들어짐, 컴퓨터가 카드를 읽어 계산하고 라인 프린터로 출력
3. 1950년대 중후반 : "싱글스트림 배치시스템"의 등장, 입출력 중에도 CPU가 계산 가능
4. 1960년도 : 시분할 시스템의 등장
5. 1970년대 이후 : 개인용 컴퓨터 사회의 등장, GUI 도입 운영체제의 등장
운영체제의 구조
커널 : 프로세스와 메모리, 저장장치를 관리하는 핵심적인 기능 담당
-> 사용자는 운영체제의 커널에 직접 접근 불가
-> 애플리케이션은 '시스템 콜'을 통해서 커널에 접근 가능
-> 시스템 콜 없이 하드디스크에 접근 가능하다면, 중요 데이터를 덮어쓸 수 있다.
컴퓨터 하드웨어와 구조
오늘날 대부분의 컴퓨터는 프로그램 내장 방식의 폰 노이만 구조
메인보드 : 다른 하드웨어를 연결하는 장치
CPU : 중앙처리 장치
메모리
컴퓨터의 부팅과정
1. ROM에 저장된 바이오스 실행됨
2. 바이오스는 주요 하드웨어에 이상이 없는지 확인
3. 이상이 있으면 부팅 X, 이상이 없다면 부트로더를 메모리로 가져와서 실행
4. 운영체제가 여러 개 설치되어 있다면, 선택 화면이 나온다.
5. 운영체제를 메모리로 불러온다.
6. 부팅 후부터는 운영체제가 메모리를 관리한다.
인터럽트
폴링 방식을 보완한 방식
CPU는 입출력 명령을 내린 후 자기는 다른 작업을 계속 함
입출력 관리자는 입출력이 완료되면 CPU에게 신호를 주고,
CPU는 신호를 받아서 ISR를 실행 시켜서 작업 완료한다.
인터럽트는 비동기 방식이기 떄문에 성능에 이점이 있다.
프로그램과 프로세스
프로그램 : 저장장치에 저장된 명령문의 집합체
프로세스 : 실행중인 프로그램
프로세스 영역
-> Code : 실행하는 코드
-> Data : 전역변수, static 변수
-> Stack : 지역변수, 매개변수
-> Heap : 프로그래머가 런타임 시 할당할 수 있는 동적 메모리 공간exe 파일을 실행하게 되면, 하드디스크의 프로그램이 메모리에 올라가게 되고 이제 프로세스로 불린다.
멀티 프로그래밍과 멀티 프로세싱
멀티프로그래밍 : 메모리에 여러 개의 프로세스가 올라간 상태
멀티프로세싱 : CPU가 여러 개의 프로세스를 처리하는 것
오늘날 멀티프로그래밍, 멀티프로세싱 두 개가 공존한다.
PCB
프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는
PCB를 만들고 저장한다.
PCB의 구조 : 프로세스 상태, 프로세스 ID, 프로그램 카운터, 여러 레지스터 정보 등등
프로세스 상태
컨텍스트 스위칭
프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해
실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 것을 말함.
컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경됨
-> 실행중인 프로세스의 작업내용을 PCB에 저장하고 실행될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅
프로세스 생성과 종료
프로세스 생성 과정
-> 운영체제는 해당 프로그램의 코드영역과 데이터 영역을 메모리에 로드하고
-> 빈 스택고 빈 힙을 만들어 공간을 확보
-> 해당 프로세스를 관리하기 위한 PCB를 만들고 값을 초기화위 생성과정은 운영체제가 부팅되고 0번 프로세스를 만들 때 딱 한번만 실행됨
나머지 프로세스는 0번 프로세스를 복사해서 쓰게 된다.
복사된 프로세스는 코드와 데이터 영역을 자신이 원하는 값으로 덮어쓴다.
쓰레드
프로세스 내의 존재하고, 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유한다.
스택 영역은 공유하지 않고 쓰레드마다 하나씩 가지고 있다.
프로세스는 독립적이기 때문에 안정성이 높음, 쓰레드는 프로세스에 의존적이기 때문에 안정성이 낮음
프로세스 간의 통신은 IPC를 사용해야 하기 때문에 오버헤드가 크고 속도가 느림, 쓰레드 간의 통신은 빠름
CPU 스케줄링
어떤 프로세스에게 CPU 사용권을 줘야 하는지
CPU를 할당받은 프로세스가 얼마의 시간동안 이용해야 하는지
다중 큐
프로세스의 준비 상태와 대기 상태는 큐 자료구조로 관리된다.
운영체제는 해당 프로세스의 우선순위를 보고 그에 맞는 "준비 큐"에 넣는다.
CPU 스케줄러는 "준비상태의 다중큐"에 들어있는 프로세스들 중에 적당한 프로세스를 선택해서 실행상태로 전환시킨다
큐에는 프로세스의 PCB가 들어간다.
FIFO
장점 : 단순하고 직관적
단점 : 한 프로세스가 완전히 끝나야 다음 프로세스가 시작, CPU 사용률 감소
FIFO는 프로세스 Burst 타임에 따라 성능 차이가 심하게 난다. -> 현대 운영체제에서 잘 쓰이지 않는다.
자료구조와 알고리즘
일주일 간의 학습했던 내용
자료구조와 알고리즘이란?
자료구조 : 데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타낸다.
알고리즘 : 어떤 문제를 해결하기 위한 확실한 방법
알고리즘은 자료구조에 많은 영향을 받는다.
시간복잡도
일반적으로 알고리즘의 속도 = 성능의 척도
주로 Big-O (최악의 경우 시간복잡도) 로 시간복잡도를 계산한다.
Big-O 표기법 : 계산에 영향을 많이 미치는 항만 표기한다.
배열
장점 : 빠른 참조 성능 -> O(1)
단점 : 데이터 삽입, 삭제가 비효율적이다, 메모리 낭비 발생 가능
연결리스트
장점 : 초기 크기를 알 필요가 없다. (메모리 낭비 가능성 감소), 삽입/삭제가 간편함
단점 : 느린 참조 성능 -> O(n)
스택
FILO의 구조
그림판의 Ctrl + Z, 괄호 형식 체크에 쓰일 수 있다.
큐
FIFO의 구조
스택과 반대 성질을 가진 구조이다.
덱
데이터의 삽입과 제거를 head, tail에서 자유롭게 할 수 있다.
스택과 큐의 성질을 모두 가지고 있는 구조
해시 테이블
해시 함수로 인덱스를 새로 만들어서 데이터를 저장하는 구조이다.
장점 : 성능이 매우 빠르다. (읽기, 삽입, 수정, 삭제 : O(1))
단점 : 해시함수에 따라 메모리를 많이 차지할 수도 있다.
인덱스가 같으면 충돌 현상이 있을 수 있다. -> Value를 연결리스트로 구현하면 해결 가능
셋
데이터의 중복을 허용하지 않는 구조
해시테이블의 Value는 사용하지 않고 Key만 사용해서 구현 가능
회고
칭찬하고 싶은 점
강의 스케줄을 밀리지 않고 수강한 점에 대해서 칭찬하고 싶습니다.
늦게 퇴근했던 날에는 쉬고 싶기도 했는데, 다른 스터디원들이 올려주신 블로그 글이나 디스코드에서 다양한 개발 관련 이야기를 해주시는 걸 보고 동기부여를 받고 강의를 수강했습니다. 배울 점이 많은 스터디원과 함께 하는 것 같아서 좋습니다👍
아쉬웠던 점
강의를 듣다 보면 생소한 키워드들이 나올 때가 있었는데, 이에 대해서 개인적으로 공부하는 시간이 부족했던 것 같습니다.
또, 잘 이해했는지 복습하는 시간이 부족했던 것 같습니다.
보완하고 싶은 점
차주부터는 강의 수강뿐만 아니라, 이해가 부족한 부분을 찾아서 개인 공부하는 시간을 늘리려고 합니다.
또, 강의를 들은 다음 날에는 복습하는 시간을 가져서 효율적인 학습을 하기 위해 노력할 것입니다.
미션
미션을 해결한 과정
운영체제 미션 1번 문제는 폴링 방식으로 작성된 예제 코드를 어떻게 수정해야 인터럽트 방식으로 개선이 가능한지 고민했습니다.
주기적으로 확인하는 반복문을 제거하고 ISR 메서드를 만드는 방식으로 수정했습니다.
자료구조와 알고리즘 1번 문제는 답이 정해져 있지 않다고 생각해서, 특정 요구사항이 있다고 가정하고 답변을 작성했습니다. (저장하는 경우가 많은지, 열람하는 경우가 많은지 등)
그 외 문제는 공부한 내용을 토대로 작성했습니다!
회고
미션 해결을 하면서 학습했던 내용을 복습하게 되는 것 같아서 좋았습니다.
처음에는 강의를 안 보고 답변을 작성한 후에, 강의를 보고 부족한 답변을 보완하는 방식으로 문제를 해결했는데
다음 미션 때는 강의를 안 보고도 부족한 답변이 없도록 노력하겠습니다!
댓글을 작성해보세요.