2학기 다짐
- 작심삼일(作心三日)도 백번이면 삼백번이다!!!!!!!!!
- 알고리즘 정리, 공부, 하루에 한 문제!
- 아침 7시 기상
To Do List
=== First. 재미난 컴퓨터 기초 PART||| 정리 ===
컴퓨터의 구성???
- 시스템 소프트웨어
- 응용 소프트웨어
- 하드웨어로 구성되어 있다
OS(Operation System)는 어디 소속?? 운영체제는 시스템 소프트웨어 소속!!
운영체제는 응용 소프트웨어와 하드웨어 사이에서 작동한다
운영체제의 종류 💻
- macOS
- windows
- iOS
- Android
- Unix
운영체제의 목적은?? 왜 필요해서 만들었을까??
- 이전 컴퓨터들은 군사용 목적, 과학적 목적으로 계산을 주로 목적으로 개발되었다. 범용성을 크게 고려하지 않았다.
- But, 지금은 다양한 종류의 컴퓨터가 나왔고, 다양한 종류의 하드웨어를 사용자와 이어줄 방법이 필요해졌다. 그래서 운영체제를 만들게 된 것이다!
- 운영체제는 다양한 전통이 있는데 iOS의 경우 UNIX 계열의 OS라고 할 수 있다
범용성 : 여러 분야나 용도로 널리 쓰일 수 있는 특성
그럼 무슨 어떤 운영체제의 역할은??
운영체제는 크게 세 가지 일을 하는데,
- 시스템 하드웨어 관리
- 사용자 프로그램의 오류나 잘못된 자원 사용을 감시, 입출력 장치 등의 자원에 대한 연산과 제어를 관리
- (가상) 시스템 서비스 제공
- 사용자에게 컴퓨터의 프로그램을 쉽고 효율적으로 실행할 수 있는 환경 제공
- 자원관리
- 컴퓨터 시스템 하드웨어 및 소프트웨어 자원을 여러 사용자 간에 효율적 할당, 관리, 보호
운영체제의 자원관리
자원관리 중에서도 먼저 볼 것은 프로세스
이다
보조기억장치에 저장되어 있는 프로그램을, 사용자가 실행시켜서 주기억장치에 올라오게 된다면, 그 실행된 프로그램을 프로세스
라고 부른다.
한 번에 여러 가지의 프로세스가 실행되기 때문에 CPU는 한 번에 여러 프로세스를 처리해주어야 한다.
그러기 때문에 CPU의 자원을 잘 나눠주는 것이 매우 중요하다. 그것을 운영체제가 관리!!
그렇다면 프로세스의 생명주기는? 프로세스 상태!?
- 생성 = (프로세스가 생성 된다) 프로그램이 실행된다,
- 준비 = (중앙처리장치에 의해 프로세스가 실행되기를 기다린다) 메모리에 올라간다
- 실행 = (중앙처리장치에 의해 프로세스가 실행된다)
- 대기 = (어떤 사건이 일어나기를 기다린다)
- 종료 = (프로세스가 종료 된다)
과 같은 라이프 사이클을 가진다
하나의 프로그램이 끝 없이 실행되고 자원을 사용하는 것은 아니기 때문에 다음과 같은 Cycle을 가진다
근데 우리가 컴퓨터를 사용할 때 하나의 프로그램이 메모리를 계속 점유하고 있는건 아니잖아? 그럼 어떻게 작동해?
그래서 시분할 시스템을 사용한다!!! 시간을 분할해서 쓴다는 것!! 시간을 쪼개서 어떤 프로세스는 실행, 다른 프로세스는 대기하는 식으로 빠르게 빠르게 상태를 변경해가며 왔다갔다 하는 것! 엄청 빠른 시간으로 이루어져서 동시에 일어나는 것처럼 보인다!
이렇게 프로세스들을 교통정리해가며 왔다갔다 잘 실행시키기 위해서는 프로세스 스케줄링
이 필요하다!!
프로세스 스케줄링!!
- FCFS(First Come First Served)
- 준비 상태 큐에 도착한 순서에 따라 차례로 CPU를 할당
- SJF(Shortest Job First)
- 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당
- 평균 대기시간이 가장 적은 알고리즘이다
- 실행시간이 긴 프로세스에 밀려 무한 연기상태 발생 가능
- Round Robin Scheduling
- 시분할 시스템을 위해 고안된 방식
- FCFS 기법을 변형
- 각 프로세스는 시간 할당량 동안만 실행
- 완료되지 않으면 다음 프로세스에게 CPU를 넘겨주고 준비상태 큐의 가장 뒤로 배치
- 할당된 시간이 클수록 FCFS와 비슷해진다
- 할당시간이 작을 수록 문맥교환과 오버헤드가 자주 발생한다
- Priority Based Scheduling
- 프로세스마다 우선순위를 부여한다
- 우선순위가 동일한 경우 FCFS 기법으로 할당
- 가장 낮은 순위를 부여받은 프로세스의 무한 연기 발생가능
- Multi Queue Scheduling
- 프로세스를 특정 그룹으로 분류할 수 있는 경우 그룹에 따라 각기 다른 준비단계 큐 사용
- 준비상태 큐 마다 다른 스케줄링 기법 사용가능
- 다른 준비상태 큐로 이동 불가
- 하위단계 준비 큐에 있는 프로세스를 실행하는 도중이라도 상위 단계 준비상태 큐에 프로세스가 들어오면 상위단계 프로세스에게 CPU를 할당
오버헤드 : 오버헤드(Overhead)는 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등을 말한다
단순하게 하나의 스케줄링을 사용하지도 않고 이것보다 훨씬 복잡한 스케줄링 통해서 운영체제가 프로세스의 자원을 관리하고 있다!!
주기억장치 관리
swap memory - 주 메모리가 부족할 때 보조기억장치의 공간을 메모리로 사용하기 위한 가상 메모리
Ram Disk - Swap memory와 반대로 주 메모리를 보조기억장치의 용도처럼 사용하는 것, 탐색기나 다른 프로그램을 이용해 파일을 쓰고 지울 수 있는 공간이 되는 것
파일 관리
- 응용프로그램들이 보조기억장치에 파일을 읽고 쓰기를 할 때는 운영체제를 통해서 한다
- 파일 시스템의 종류는 각 운영체제마다도 굉장히 다양하다
- Unix - Unix File System
- Linux - 확장 파일 시스템, ZFS, XFS ...
- macOS - HFS, HFS+, AFPS
- Windows - FAT, NTFS
쉽게 말해서 도서관 사서와 같은 존재라고 말할 수 있다. 운영체제마다 파일을 읽고 쓰는 방법이 다 다르기 때문에, 응용프로그램은 운영체제를 통해서 파일을 읽고 쓴다. 서로 다른 운영체제에서 저장된 파일일 경우 다른 운영체제에서 정상적으로 열리지 않는 경우가 있다. 그것이 바로 이런 이유이다
⭐️⭐️ 커널 ⭐️⭐️
- Kernal
- 운영체제의 핵심인 존재
- 운영체제의 정체성과도 같다
- 보안, 자원관리, 추상화
컴퓨터는 그럼 어떻게 동작할까??
지금까지 배운 것을 바탕으로 컴퓨터 동작을 설명해 보자!!!
아래의 장치, 프로그램들을 이용해서 음악을 재생하고자 할때 어떤 과정을 거칠까??
Step1 - 사용자가 마우스를 클릭하여 재생명령 입력
사용자 : 음악 재생 버튼 클릭 -> 입력장치(마우스) : 클릭 신호 수신
Step2 - 입력장치가 OS를 통하여 응용프로그램에 입력사실 전달
입력장치 : OS에게 사용자 입력을 전달
→ OS(운영체제) : 클릭된 곳이 어디인지 판단하여 입력을 App에 전달해준다.
→ App : 클릭을 전달받아 재생명령을 수신한다
Step3 - 보조기억장치에 음악 데이터 요청
APP(응용프로그램) : 보조기억장치에 음악 데이터를 요청한다
→ HDD(보조기억장치) : 음악 데이터를 주기억장치로 복사
→ RAM(주기억장치) : 음악 데이터를 수신 후 OS에 수신 되었음을 알린다
Step4 - 데이터 및 명령어를 CPU로 전달 후 연산결과 수신
RAM(주기억장치) : CPU로 연산명령 전달 (음악파일 역시 0과 1로 이루어져 있기 때문에 디코딩을 위해서 연산)
→ CPU(중앙처리장치) : 명령어를 해독하여 연산수행 후 주기억장치로 결과 전달
→ RAM(주기억장치) : CPU의 연산결과 수신
Step5 - 연산결과를 응용 프로그램으로 전달
RAM : OS에 연산이 끝났음을 알림
→ OS : 응용프로그램으로 결과 전달
→ APP : 연산결과 수신 후 결과에 따른 명령처리
Step6 - 사용자에게 출력하도록 출력장치로 요청
APP : OS에 음악 출력을 요청
→ OS : 출력장치에 음악 출력 요청
→ 출력장치(스피커) : 전달된 데이터를 사용자에게 출력
멀티 코어 / 멀티 태스킹 ??!
멀티태스킹
- 위에서 봤듯이 운영체제가 엄청나게 많은 일을 하고 CPU에 일을 시킨다. 작은 단위의 시간으로 쪼개서 작업을 하기 때문에 동시에 많은 일 들을 진행하는 것처럼 보인다
- 싱글코어 멀티태스킹 : 하나의 코어에서 아주 빠르게 여러 가지 일을 처리하는 것처럼 보이는 것
- 멀티코어 멀티태스킹 : 진정한 멀티태스킹으로 볼 수 있는 것(?)이라고 할 수 있긴 하다. 하나의 코어에서도 작은 단위로 쪼개서 빠르게 작업을 진행하겠지만, 일단은 여러 코어에서 독립적으로 일을 처리한다.
데이터베이스
- DataBase(DB)
- 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합
- 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음
자료구조 vs 데이터베이스
자료구조 : 대부분 주기억장치에서 이루어질 내용
데이터베이스 : 대부분 보조기억장치에서 이루어질 내용
데이터베이스의 종류
- 관계형, 키-값형 , 객체형, 문서형, 컬럼형 등
- 주로 관계형을 많이 사용한다
DBMS(DataBase Management System)
- DataBase에 접근할 수 있는 기능을 제공하는 소프트웨어
- 즉, 데이터베이스계의 운영체제
- MySQL, PostgreSQL, SQLite, MariaDB, ...
SQL(Structured Query Language)
- DBMS를 통해 데이터를 관리하기 위한 구조화된 질의문을 작성하기 위한 언어
- 관계형 데이터베이스 관리 시스템에서 사용
- 요즘에는 SQL을 사용하기 보다는 데이터를 객체처럼 사용하기도 한다