본문 바로가기

CS23

14. CPU Scheduling CPU 스케줄링은 왜 생겼을까? 운영체제의 발전을 공부하면서 다중프로그래밍이 도입된 것을 알게됐다. 다중 프로그래밍은 I/O 처리로 인한 CPU Idle Time을 줄여서 CPU 활용률을 향상 시키기 위해서 도입 되었는데 이 때, 다중 처리를 하기 위한 기법이 CPU 스케줄링이다. 스레드까지 공부하면서 알게 된 내용은 CPU는 스레드를 스케줄링해야 한다는 것이다. 근데 어떤 스레드를 선택할 것인지 골라야한다. 위와 같은 정책을 가진 알고리즘을 크게 CPU 스케줄링 알고리즘이라고 하고 엄밀하게는 스레드 스케줄링이라고 한다. 다중 프로그래밍은 2가지 스케줄링을 통해 발생한다. 1. 작업 스케줄링(job scheduling) - 디스크 장치로부터 메모리에 올릴 작업을 선택하는 것이다. 프로세스가 시작하거나 종.. 2024. 4. 22.
7. 프로세스 (Process) 본격적인 운영체제 개념 이전까지는 운영체제를 알기 위한 전반적인 흐름이나 기본적인 지식을 설명하는 내용이었다. 운영체제의 시작을 알리는 프로세스란 도대체 무엇일까? 우리는 Chrome, Kakao Talk와 같은 Application을 프로그램이라고 부른다. 이 녀석들은 HDD나 SSD에 저장되어있다. 바로가기 icon에 대해 '우클릭 - 속성 - 파일위치열기'를 눌러보면 정확한 프로그램을 찾을 수 있다. windows에서는 Chrome.exe와 같은 *.exe 확장자가 붙는데 이것을 프로그램이라고 한다. 앞에서 프로세스도 *.exe라고 다룬적이 있다. 맞지만 조금 다르다. exe 파일에는 코드, 데이터, 스택, 힙 공간이 목적 코드로 작성되어있는데 이 실행파일을 실행했을 경우 메모리에 적재되는데 실행 .. 2024. 4. 21.
5. 운영체제의 역할 운영체제에 필요한 컴퓨터 시스템은 어떻게 구성되어 있을까? 운영체제의 역할에 대해 이해하려면 먼저 컴퓨터 시스템의 구조를 알아야한다. 우리는 1. 운영체제란? 에서 컴퓨터 시스템의 기본적인 구조를 확인했었다. 크게 응용 SW OS HW의 계층을 갖고 있는데 여기서 OS가 사용자(응용 SW)와 HW 간에 중계 역할(인터페이스)을 수행하고 있기 때문이다. 그래서 OS는 자원에 대해 배타적 독점을 하고 있고 사용자나 SW는 OS를 통해서만 HW에 접근할 수 있다는 특징이 있다. 사실 이 내용은 OS의 선수과목으로 언급되는 컴퓨터 구조나 시스템 프로그래밍에서 공부해야 할 내용인데 이미 알더라도 복습하는 내용으로 넘어가려고 한다. CPU(Central Processing Unit)는 중앙처리장치로 메모리에 적재된.. 2024. 4. 21.
4. 시분할 다중프로그래밍(Time Sharing Multi-Programming) OS 시분할 다중 프로그래밍의 출현 배경? 시분할 다중 프로그래밍은 다중 프로그래밍 기법과 거의 동시에 연구가 시작되었다. 다중 프로그래밍과 마찬가지로 배치 처리에 대한 문제점을 개선하고자 연구되었으나 다중 프로그래밍 방식의 문제점도 발견하고 연구하게 되었다. 발견한 문제점은 비대화식 처리 방식과 그로 인한 느린 응답, 오랜 대기 시간의 문제이다. 대화식 시스템 시분할 운영체제는 사용자에게 빠른 응답을 제공하기 위해 대화식 시스템을 제안했다. 키보드와 모니터를 통해 메인 컴퓨터에 모뎀 간 연결 후 시간에 따른 처리를 하는 방법이다. 각 사용자는 메인 PC에 여러 키보드와 여러 터미널을 통해 응답 받을 수 있다. 핵심은 사용자의 입력 속도보다 컴퓨터의 연산 속도가 빠르므로 사용자 입장에서는 응답이 느리다고 생각.. 2024. 4. 21.
3. 다중 프로그래밍 (Multi-Processing) OS 다중 프로그래밍 기법이 출현한 배경을 생각해보자. 이전, 배치 처리에서 어떤 문제로 인해 다중프로그래밍 방식의 아이디어가 제안 되었을 것이다. 배치 처리는 일괄적으로 처리할 수 있게 되었지만 CPU 작업 중 특정 명령 코드에서 I/O 작업을 요청한다. 그럼 컴퓨터는 CPU 작업을 하다가 I/O 작업을 하게 되는데 이 작업이 반복되는 현상이 발생한 것이다. 실질적으로 컴퓨터에서 처리를 하는 HW는 CPU인데 컴퓨터가 I/O 작업을 하면서 CPU는 대기하는 현상이 발생한다. 이것을 CPU idle time 이라고 한다. CPU IDLE Time을 줄이면 CPU 활용률(처리율)이 증가하게 된다. 그래서 다중 프로그래밍 기법이 출현한 것이다. 다중 프로그래밍 기법은 여러 프로그램을 메모리가 수용할만큼 메모리에 .. 2024. 4. 21.
6. STL 사용하기 - std::list STL 이란? C++ 에서 제공하는 STandard Library를 STL이라고 한다. 자바에서는 자바에서 제공하는 API라고 볼 수 있다. 지금까지 list에 대해 직접 설계해보았고 list에 대한 설명이 충분했다. 이번에는 STL을 직접 사용하면서 어떤 기능이 있고 언제, 어떻게 사용할 지 생각해보도록 하자. ※ 시간이 오래 걸리는 Method는 제외한다. (효율적 사용) std::list Construct Method Description (constuctor) 리스트 생성시 입력 값 operator= = 기호에 대한 연산 방법 Iterators Method Description begin() 리스트 Head에 속한 데이터 위치 end() 리스트 마지막 위치 != Tail, null 값 rbegin.. 2024. 2. 11.
5. 원형 연결 리스트 (Circular Linked List) 원형 연결 리스트란? 단순 연결 리스트에서 끝이 처음과 연결되어 있는 형태를 원형 연결 리스트라고 합니다. STL에도 구현되어있지 않고 아직 학생 수준이지만, 실제로 사용되는 경우도 본 적이 많이 없습니다. 그래서 단순하게만 만들어보도록 할 것인데, 이중 연결 리스트 형태로 만들려고 합니다. (실제로 순환적인 요소는 큐 또는 재귀를 많이 사용하는듯) 원형 연결 리스트(Circular Linked List) 구현하기 많은 기능을 추가하지는 않겠습니다. 노드 #pragma once template class Node { public: Node(T data); T getData() const; Node* getNext() const; Node* getPrev() const; void setNext(Node* .. 2024. 2. 10.
7. 다차원 배열 (Multi Dimensional Array) 2차원 배열이란? 우리는 2차원 배열에 익숙하다. 지금 이 글을 보는 화면도 x by y의 해상도를 가진 2차원 배열이다. 2차원 배열의 경우, 1차원 배열이랑 다를게 없어서 솔직히 뭘 써야 할 지 모르겠다. 조금만 생각을 바꾸면 되는게 2차원 배열이라서... 1차원 배열이 배열 형태를 띠는 것이 2차원 배열입니다. 어떻게 봐야할까요? 변수 큐브를 생각해봅시다. 우리 눈에는 3차원으로 보이는 해당 큐브는 한 블럭이 단위입니다. 컴퓨터에서도 똑같이 int cube 라고 하면 저 한 블럭은 int 정보를 갖게 되는 것이에요. 선형 배열 (1차원 배열) 그럼 배열은? 지갑을 설명했듯, 큐브에서도 보일 수 있는데요. 같은 '단위'를 기준으로 크기를 가진 것이 배열인데요. 해당 사진에서는 block이 3개 있다는.. 2024. 2. 10.
4. STL 따라잡기 - 이중 연결 리스트 (Doubly Linked List) 구현 이중 연결 리스트란 ? 여기서 연결 리스트에 대한 개념을 알게 되었고 여기서 단순 연결 리스트를 구현해보았다. 또, 앞선 포스팅에서 연결에 대한 방법을 말했는데 '이중 연결 리스트' 는 양방향(이중)으로 구성된 자료구조이다. 즉, 싱글 연결 리스트는 코스 여행이라면 이중 연결 리스트는 자유 여행이다. 이에 대해선 내가 생각한 예시이기 때문에 한 번 생각해보고 비슷한 예시를 찾아서 본인만의 개념으로 이해하길.. 이번 STL 따라잡기 포스트는 standard library인 list를 만들어보겠다. 먼저, list에 어떤 기능이 있는지 한 번 알아보자. 우리는 STL list에 어떤 기능이 구현되어있는지 파악한 뒤에 이를 정리할 것이다. 깃허브 이슈에 구현할 내용을 작성하고 이를 바탕으로 레파지토리에 저장할.. 2024. 2. 7.