컴퓨터는 하드웨어와 소프트웨어로 구성되어 있습니다.
💻하드웨어는 컴퓨터의 주요 부품들의 총칭으로 본체를 담당하고,
💿소프트웨어는 시스템을 담당합니다.
🧲컴퓨터의 기본 구성요소
컴퓨터의 구성요소는 CPU, Memory, 입출력 장치(i/o)로 총 3가지로나 나뉩니다.
📌CPU(중앙처리 장치)
컴퓨터에서 기억, 해석, 연산, 제어라는 4대 주요 기능을 책임지는 장치를 말합니다.
👉내부 구성은 크게 산술/논리 연산 장치(ALU)와 제어 장치, 레지스터로 구성되어 있습니다
📌Memory(기억 장치)
컴퓨터에서 데이터를 보존하기 위한 장치를 말합니다.
👉중앙처리장치 내에 구비되어 있는 레지스터의 용량이 너무 적기 때문에 기억장치가 별도로 필요합니다.
❗주 기억 장치의 종류로는 RAM과 ROM이 존재합니다.
📌I/O(입출력 장치)
사용자를 입력을 받아 중앙처리장 티로 넘기고 컴퓨터가 작업한 내용을 사용자에게 다시 나타내 주는 장치를 말합니다.
📍입력장치 : 키보드, 마우스, 조이스틱 등이 있습니다.
📍출력장치 : 모니터, 프린터 스피커 등이 있습니다,
🧭운영체제
컴퓨터와 사용자간 인터페이스로서 동작을 제공합니다.
👉운영체제는 처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 시간 단축을 위해 쓰입니다.
📃운영체제의 기능
📍프로세서, 기억장치, 입출력 장치, 파일 및 정보 등의 자원을 관리
📍자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능
📍제공 사용자와 시스템 간의 편리한 인터페이스를 제공
📍시스템의 각종 하드웨어와 네트워크를 관리 및 제어
📍데이터를 관리하고 데이터 및 자원의 공유 기능
📍제공 시스템의 오류를 검사 및 복구
📍자원 보호 기능 제공
📍입출력 보조 기능 제공
🔌운영체제의 목적
운영체제의 목적에는 처리능력 향상, 반환 시간 단축, 사용 가능도 향상, 신뢰도 향상 등이 있습니다.
👉처리능력, 반환시간, 사용 가능도, 신뢰도는 운영체제의 성능을 평가하는 기준이 됩니다.
📍처리능력(Throughput)
일정 시간 내에 시스템이 처리하는 일의 양입니다.
📍반환시간(Turn Around Time)
작업이 처리가 완료될 때까지 걸린 시간입니다.
📍사용 가능도(Availability)
시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도입니다.
📍신뢰도(Reliabilty)
시스템이 주어진 문제를 정확하게 해결하는 정도입니다.
🪓운영 체제의 주요 자원 관리
운영체제의 핵심기능은 자원을 효율적으로 관리하는 일입니다.
👉다음은 하드웨어를 구성하는 cpu와 메모리를 비롯해 입출력 장치의 관리는 어떤 식으로 해야 할까요?
💻CPU관리 방법
CPU가 하나밖에 없는 가장 기본적인 컴퓨터는 프로세스가 여러가 동시에 수행될 수가 없기 때문에 스케쥴링을 통해 어떤 작업을 수행해야 할지 결정하는 일이 필요합니다.
👉대표적인 CPU 선입선출(FCFS), 라운드 로빈(Round Robin), 우선순위(Priority) 기법들이 있습니다.
📍선입선출 기법 (FCFS;First Come First Served)
먼저 요청받은 작업을 먼저 처리하는 방식입니다.
❗하지만 짧은 수행 시간을 가진 프로세스들이 대기하고 있더라도 먼저 온 프로세스가 긴 수행 시간이라면 장시간 기다려야 하는 치명적인 문제가 있었습니다.
📍라운드 로빈 기법(Round Robin)
위에👆 설명한 선입 선출 방식을 보안하고자 나온 기법으로 CPU를 할당받아 사용할 수 있는 시간을 일정하게 제한하는 기법입니다.
👉긴 작업을 요구하는 프로세서는 정해진 시간 동안 작업을 끝내지 못하면 다시 CPU의 대기열의 제일 뒤로 보내는 방식입니다.
📍우선순위 기법(Priority)
우선순위 기법은 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세서부터 먼저 동작하는 방식입니다.
👉상대적으로 중요한 프로세스는 먼저 시작한다.
💾메모리 관리 방법
프로그램이 CPU에서 실행되려면 해당 부분이 메모리에 올라가 있어야 합니다.
❗즉, 운영체제는 각 프로세스가 자신의 메모리 영역에만 접근할 수 있도록 관리해야 합니다.
👉메모리를 관리하는 방식에는 고정 분할(fixed partition) 방식, 가변 분할(variable partition) 방식, 가상 메모리(virtual memory) 방식 등이 있습니다.
📍고정 분할 방식 (fixed partition)
물리적 메모리를 몇 개로 분할로 미리 나누어 관리하는 방식입니다.
❗하지만 하나의 분할된 메모리에는 하나의 프로그램 밖에 적제 될 수 없고 메모리에 남는 역역은 내부 조각이 되어 낭비되는 공간이 많고 비효율적입니다,
📍가변 분할 방식 (variable partition)
고정 분할 방식으로 낭비되는 내부 조각을 줄이기 위해 매 시점 프로그램 크기에 맞게 메모리를 분할하여 사용하는 방식입니다.
❗하지만 내부 조각을 줄이는 것에 성공하였으나 이번에는 외부조각이 발생하여 메모리가 낭비되었습니다.
📍가상 메모리 방식 (virtual memory)
현재 사용되고 잇는 부분만 메모리에 올리고, 나머지는 저장해두는 방식으로 사용할 수 있는 메모리 크기를 제한을 두지 않고 개발하는 방식을 말합니다.
👉기존의 메모리보다 용량이 커서 실행하지 못했던 프로세서들도 실행할 수 있습니다.
실제로 존재하지 않는 메모리임에도 존재하는 것처럼 사용이 가능하여 제한이 없고 낭비도 없어 현재 가장 널리 사용되는 메모리 관리 기법입니다.
⌨주변장치 및 입출력 장치의 관리 방법
컴퓨터의 주변 장치와 입출력 장치는 인터럽트라는 메커니즘을 통해 관리가 이루어집니다.
👉인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능입니다.
입출력 장치나 주변 장치에서 입력이 들어오면 인터럽트가 발생해 먼저 처리 루틴을 실행한 뒤 처리 후 인터럽트가 발생하기 직전의 상태를 복구해 중단된 작업을 재개합니다.
키보드 타이핑 ➡ 인터럽트 발생 ➡ 모니터에 타이핑 출력
📱운영 체제의 응용프로그램 관리
컴퓨터에서 작업을 수행하기 위해서는 응용 프로그램이 필요합니다.
👉이 응용프로그램을 관리하고 권한을 부여하는 것이 운영체제입니다.
사용자는 응용 프로그램을 통해 컴퓨터의 자원을 활용할 수 있습니다.
❗하지만 마음대로 자원에 접근하고 사용하다 보면 해커들의 공격에 매우 취약해집니다.
따라서 중간에서 사용자를 관리하거나 자원의 접근을 통재할 수 있는 운영체제라는 중재자가 필요 한겁니.
👉즉 응용 프로그램은 운영체제를 통해야만 컴퓨터에게 작업을 할당 수 있습니다.
🎬프로세서
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
👉스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
🔎멀티프로세싱
여러 개의 프로세스를 사용하여 작업하는 것을 멀티프로세싱이라고 합니다.
🔎멀티태스킹
여러 개의 프로세스를 사용하여 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 합니다.
📋프로세스의 구성요소
📌코드 영역
실행할 프로그램의 코드가 저장되는 영역입니다.
👉CPU가 해석할 수 있도록 Binary Code 상태로 올라간다.
📌데이터 영역
전역 변수(Global Variable)와 정적 변수(Static Variable)가 저장되는 영역입니다.
📌스택 영역
지역변수와 매개변수가 저장되는 영역입니다.
👉잠시 사용하는 임시 메모리 영역으로 함수 호출 시 생성되었다가 호출 완료 후 사라집니다.
📌힙 영역
사용자가 직접 공간을 할당(동적 할당), 해재하는 메모리 공간입니다.
👉선입 선출 구조로 가장 먼저 들어온 데이터가 가장 먼저 나갑니다.
⭐new연산자로 메모리를 할당하고 free()로 메모리를 해재 할 수 있습니다.
🚗프로세스의 상태도
프로세스 라이프 사이클은 다음과 같은 5단계로 나뉩니다.
📍생성(new)
디스크에서 메모리로 프로그램이 올라가 실행 준비를 하는 상태
📍준비(ready)
순서에 맞춰 처리를 기다리는 상태
📍수행(running)
작업이 처리되고 있는 상태
📍대기(waiting)
프로세스가 어떠한 조건에 의해 멈춰있는 상태로 그 조건이 해결되기를 기다리는 상태
📍종료(terminated)
프로세스가 완전히 종료된 상태
new ➡ ready
📌프로세스가 처리되기 위한 메모리와 필요한 주변 장치들 체크 - admitted
ready ➡ running
📌알고리즘에 따라 프로세스 선택 처리 - interrupt
running ➡ ready
📌현재 처리되고 있는 프로세스 할당된 시간이 다 되었을 때 넘김 - Scheduler dispatch
running ➡ waiting
📌I/O 요청 발생이 발생하면 작업을 잠시 작업을 마칠 때까지 waiting으로 넘김 - I/O or event wait
waiting ➡ ready
📌 I/O요청이 완료되면 다시 ready상태로 넘김 - I/O or event completion
running ➡ terminated
📌프로세서 종료 - exit
⚡프로세스의 특징
프로세스가 가지는 구별적 특징은 다음과 같습니다.
📍자원 소유의 단위
각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야 합니다
👉자원들을 프로세서 단위로 할당받아 정리되어야 합니다.
📍디스패칭의 단위
여러 개의 프로세스를 병렬적으로 실행되기 위해 각각의 프로세스에 cpu사용시간을 나누어 주어 하나의 프로세서에서 여러 개의 디스패칭 단위가 실행될 수 있도록 해야 합니다.
👉이러한 디스패칭 단위를 스레드라고 합니다.
🦧프로세서(Processor)? 🐒프로세스(Process)?
공부를 하다 보면 프로세스를 프로세서로 잘못 입력했을 때 다른 검색 결과가 나온 경험이 있을 것입니다.
👉이 둘은 이름은 비슷하지만 엄밀히 다른 존재입니다.
📍프로세서(Processor)
프로세서(processor)는 프로그램을 기억 장치로부터 읽어 연산 처리, 비교 처리, 데이터 전송, 편집, 변환, 테스트와 분기 등의 데이터를 처리하고, 각종 장치를 구동하는 역할을 담당하는 CPU를 의미한다.
👉프로세서 === CPU
📍프로세스(Process)
컴퓨터에서 실행 중인 프로그램을 의미한다
👉실행되는 프로그램들은 전부 프로세스라고 보면 된다
🛶스레드
스레드는 명령어가 CPU를 통해서 수행되는 객체의 단위입니다
👉프로세스보다 더 작은 실행 단위를 말합니다.
🔎한 개의 프로세스에는 적어도 1개 이상의 스레드가 존재해야 합니다.
하나의 프로세서에서 여러 개의 루틴을 동시에 수행할 때 여러 개의 요청을 동시에 처리하기 위해서는 스레드가 필요하다.
👉즉 하나의 프로세스 안에서도 여러 가지 작업들이 동시에 진행될 때 스레드가 필요하다.
🧊스레드의 특징
📍1 스레드 1 명령 수행
하나의 스레드 한 번에 하나씩 명령을 수행합니다.
📍스레드 간의 영역 공유
각 스레드마다 callstack이 존재하며 나머지 영역은 스레드끼리 공유합니다.
📍독립성
스레드는 다른 스레드와 독립적으로 동작합니다.
👉스레드가 2개 이상시 실행 및 종요 순서 예측 불가
🌠싱글 스레드
하나의 프로세스 세거 오직 하나의 스레드로만 실행합니다.
👉하나의 레지스터와 나의 스택만 사용
🌌멀티 스레드
CPU의 최대 활용을 위해 프로그램을 둘 이상을 동시에 실행하는 기술입니다.
👉시스템 자원의 활용 극대화 및 처리량 증대
🥊멀티스레드 VS 싱글 스레드
멀티 스레드와 싱글 스레드의 차이점은 아래의 그림을 통해 알 수 있습니다.
멀티 스레드 | 싱글 스레드 | |
응답성 | 👍 | 👎 |
경제성 | 👍 | 👎 |
활용성 | 👍 | 👎 |
스레드 생성 시간 | 👎 | 👍 |
접근성 | 👎 | 👍 |
난이도 | 👎 | 👍 |
📍응답성
작업 도중 에러 발생 시 멀티 스레드 모델의 경우 새로운 스레드를 만들어 극복할 수 있습니다. 반면 싱글 스레드의 경우 에러를 처리하지 못하고 멈춰 버립니다.
📍경제성
멀티 스레드 모델의 경우 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원의 소모를 줄일 수 있고 스레드 간 통신이 자유로워 데이터를 빠르게 주고받을 수 있습니다.
📍활용성
멀티 스레드 모델의 경우 다중 CPU의 경우 스레드를 병렬로 수행할 수 있습니다.
반면 싱글 스레드 모델의 경우 한 개의 CPU밖에 사용하지 못하기 때문에 병렬로 수행하기 위해서는 Cluster모듈을 사용하거나 외부의 프로그램을 사용해야 합니다.
📍스레드 생성 시간
스레드 생성시간의 경우 context switching, 동기화 등의 이유로 멀티 스레드 모듈 보디 싱글 스레드 모듈이 더 빠릅니다.
📍접근성
공유하는 자원에 접근하는 경우 멀티 스레드 모듈의 경우 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 동기화가 필요합니다.
반면 싱글 스레드의 경우 동기화에 신경 쓰지 않아도 됩니다.
📍난이도
멀티 스레딩의 경우 문맥 프로그래밍 난도가 높습니다. 또한, 스레드 수만큼 자원을 많이 사용합니다 또한, 여러 프로세스를 사용하기 때문에 문맥 교환이 필요합니다.
반면 싱글 스레드의 경우 신경 써야 할 부분이 적어 난도가 낮고 스레드도 하나씩만 사용하기 때문에 간단한 계산이나 연산은 싱글 스레드가 더 유리합니다,
728x90
반응형
'CS' 카테고리의 다른 글
[운영체제]UNIX / LINUX 비교하기 (0) | 2023.03.21 |
---|---|
[CS]자료 구조 & 알고리즘 (1) | 2022.12.05 |