본문 바로가기
  • GDG on campus Ewha Tech Blog
4-1기 스터디/CS 기초

[CS 기초 스터디] 1주차 회의록

by seoyoee 2022. 11. 7.

정규 회의록

일시 : 2022.10.04 11:00
범위 : 운영체제 1~3강
강의 : 반효경 교수님 운영체제 강의
활동 : github에 올린 내용 정리본 읽고 공부한 내용에 대해 발표 및 질의응답
정리 : https://github.com/GDSC-Ewha-4th/Study-CS.git


<스터디 내용>

1. 운영체제 개요

운영체제(Operating System, OS)
- 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 기술
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
- 한 서버(컴퓨터)에 여러 사용자(프로그램)가 동시에 접속할 때 마치 혼자 서버를 사용하는 것 같은 환상 - 운영체제가 처리
- 컴퓨터 시스템의 자원(CPU, 메모리 등)을 효율적으로 관리
- Resource Sharing - 실행중인 프로그램들에게 짧은 시간 CPU를 번갈아 할당, 한정된 메모리 공간 적절히 분배 → 효율성, 형평성

컴퓨터 시스템의 구조
컴퓨터 내부: CPU, 메모리
입출력(I/O) 디바이스: 디스크, 키보드, 프린터, 모니터
커널: 운영체제의 핵심 부분
메모리 - CPU의 작업 공간(CPU에서 매 clock 마다 메모리의 기계어를 읽어 연산 수행)
외부 장치 직접 접근 불가, I/O 컨트롤러에 요청

운영체제의 기능
- CPU 스케줄링: 어떤 프로그램에게 CPU 사용권을 줄지 결정
- 메모리 관리: 한정된 메모리를 어떻게 쪼개어 쓸지 결정
- 디스크 스케줄링: 디스크에 들어온 여러 요청을 어떤 순서로 처리할지 결정 = 엘리베이터 스케줄링
- 인터럽트, 캐싱: 빠른 CPU와 느린 I/O 장치간 속도차 극복
Interactive Application: CPU와 I/O 번갈아 사용
Scientific Application: I/O 작업 없이 CPU만 오래 사용

CPU 스케줄링
- FCFS (First-Come First-Served)
먼저 도착한 순서대로 프로세스 처리
도착 순서에 따라 대기 시간의 variation 커짐
- SJF (Shortest-Job-First)
CPU 사용시간이 가장 짧은 프로세스를 제일 먼저 스케줄
minimun average waiting time 보장
Starvation(기아 현상) 발생 - 형평성 문제
- Round Robin (RR) 각 프로세스 동일 크기의 CPU 할당시간을 가지고 할당 시간이 끝나면 인터럽트 발생하여 CPU 빼앗김
대기시간이 프로세스의 CPU 사용시간에 비례 - 형평성
최대 대기시간: (n-1) \ 할당시간

메모리 관리
파일시스템에서 프로그램 실행 → 각 프로세스 가상 메모리 생성 → 필요한 부분만 메모리에 올림 → 메모리 가득 차면 스왑영역에 저장
컴퓨터 꺼지면 파일시스템은 살아 있지만 메모리는 자동적으로 사라짐
스왑영역도 비휘발성이지만 프로세스가 종료되었기 때문에 의미 없는 정보
- LRU: 가장 오래 전에 참조한 페이지 삭제
- LFU: 참조 횟수가 가장 적은 페이지 삭제

디스크 스케줄링
디스크 접근 시간 = 탐색 시간 + 회전 지연 + 전송 시간
디스크 헤드의 이동 최소화(탐색 시간 최소화)
- FCFS (First-Come First-Served)
- SSTF (Shortest Seek Time First)
현재 위치를 기준으로 가장 가까운 곳으로 이동
Starvation - 형평성 문제
- SCAN
헤드가 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리 = 엘리베이터 스케줄링

저장장치 계층구조와 캐싱
CPU - Registers - Cache Memory - Main Memory - Disk
속도 차이를 완충하기 위해 계층구조 이용
캐싱: 빠른 저장 공간에 정보를 복사해 놓아서 디스크까지 내려가지 않고 재사용 가능

플래시메모리
비휘발성, 전력 소모 적음, 물리적인 충격에 강함, 작은 크기, 가벼움
→ 모바일 장치에서 쓰기 좋은 특징
→ 대용량 시스템에서 SSD라는 이름으로 하드디스크 대체 시도
한계: 쓰기 횟수 제한이 있음, 오랜 시간 지나면 데이터 변질 가능성 있음

운영체제의 종류
서버용, PC용, 스마트디바이스용 운영체제
공개 소프트웨어 (Open Source Software): Linux, Android

2. 컴퓨터 시스템의 구조

운영체제
좁은 의미의 운영체제: 커널, 운영체제의 핵심 부분으로 메모리에 상주하는 부분
넓은 의미의 운영체제: 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함하는 개념

운영체제의 목적
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
- 컴퓨터 시스템의 자원(HW/SW)을 효율적으로 관리 - 형평성, 효율성

- 동시 작업 가능 여부
단일 작업 (single tasking): 한 번에 하나의 작업만 처리
다중 작업 (multi tasking): 동시에 두 개 이상의 작업 처리

- 사용자의 수
단일 사용자 (single user)
다중 사용자 (multi user)

- 처리 방식
일괄 처리 (batch processing): 작업 요청의 일정량 모아서 한꺼번에 처리
시분할 (time sharing): 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
실시간 (Realtime OS): 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
- 경성 실시간 시스템 (Hard realtime system)
- 연성 실시간 시스템 (Soft realtime system)

Multitasking, Multiprogramming, Time sharing, Multiprocess
컴퓨터에서 여러 작업을 동시에 수행하는 것을 의미
Multiprocessor - 하나의 컴퓨터에 CPU가 여러개 붙어 있음을 의미

운영체제의 예
- 유닉스 (UNIX)
코드의 대부분을 C언어로 작성
사람이 이해하기 쉬워서 높은 이식성 가짐
최소한의 커널 구조
소스코드 공개
- DOS (Disk Operating System)
단일 사용자용 운영체제, 메모리 관리 능력의 한계
- MS Windows
MS사의 다중 작업용 GUI 기반 운영체제
불안정성

운영체제의 구조
CPU 스케줄링
메모리 관리
파일 관리
입출력 관리
프로세스 관리

컴퓨터 시스템 구조
device controller: I/O를 담당하는 작은 CPU
local buffer: controller의 작업 공간
Mode bit
CPU가 사용자 프로그램에 의해 실행되는지 OS에 의해 실행되는지 구분
1 - 사용자 모드, 0 - 모니터(OS) 모드
보안을 해칠 수 있는 명령어(특권 명령)는 모니터 모드에서만 수행 가능

Interrupt line: device가 작업을 끝내면 CPU에 interrupt를 걸어 CPU가 자동적으로 운영체제로 넘어감
PC (Program Counter): 다음 번에 실행할 메모리의 주소를 가지고 있음
timer: 일정 시간 간격으로 interrupt 발생시켜 CPU 독점을 막음
CPU가 I/O controller에게 요청하는 기계어는 특권 명령
→ OS에 요청해야 함
시스템 콜: 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것

인터럽트
인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- Interrupt (하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
- Trap (소프트웨어 인터럽트)
Exception: 프로그램이 오류를 범한 경우
System call: 프로그램이 커널 함수를 호출하는 경우

인터럽트 벡터: 운영체제 종류별로 실행해야 할 코드의 위치를 담고 있는 부분(포인터)
인터럽트 처리 루틴: 해당 인터럽트를 처리하는 커널 함수
현대의 운영체제는 인터럽트에 의해 구동됨

Device Controller
I/O device controller
- 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- local buffer를 가짐 (일종의 data register)

I/O는 실제 device와 local buffer 사이에서 일어남
I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림

동기식 입출력과 비동기식 입출력
- 동기식 입출력 (synchronous I/O)
I/O와 CPU의 작업이 동기화 되어야 함
I/O의 작업이 끝난 후 다음 작업 수행
기다리는 동안 다른 프로그램에게 CPU를 줌
- 비동기식 입출력 (asynchronous I/O)
I/O와 CPU의 작업이 동기화 될 필요 없음
I/O의 결과값과 상관 없이 다음 작업 수행

두 경우 모두 I/O의 완료는 인터럽트로 알려줌

DMA
DMA (Direct Memory Access)
- 메모리는 CPU만 접근할 수 있음
- 인터럽트가 빈번할 경우 오버헤드가 커지기 때문에 DMA controller가 메모리에 직접 접근할 수 있음 → CPU에게 알려줌

서로 다른 입출력 기계어
- I/O를 수행하는 special instruction에 의해 (memory 접근 기계어 따로, I/O 접근 기계어 따로)
- Memory Mapped I/O에 의해 (memory 접근 기계어로 I/O까지 접근, memory 주소 I/O까지 연장)

프로그램의 실행 (메모리 load)
Virtual memory → Physical memory
주소 변환(Address translation) 필요
프로세스 각각의 Address space
- code: 실제 CPU에서 실행할 기계어
- data: 전역변수, 프로그램 시작에서 종료까지 남아있는 데이터
- stack: 함수 호출, 리턴 관련 정보

커널도 하나의 프로그램이기 때문에 함수 구조로 되어 있음
code, data, stack으로 구성

커널 주소 공간의 내용
- code
    시스템 콜, 인터럽트 처리 코드
    자원 관리를 위한 코드
    편리한 서비스 제공을 위한 코드
- data
    PCB (Process Control Block): 모든 하드웨어와 프로세스를 관리하기 위한 자료구조
- stack
    커널의 스택은 각 프로세스마다 별도로 두고 있음

함수
- 사용자 정의 함수: 자신의 프로그램에서 정의한 함수
- 라이브러리 함수: 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 실행파일에 포함됨
- 커널 함수: 운영체제 프로그램의 함수, 커널 함수의 호출 = 시스템 콜

사용자 정의 함수, 라이브러리 함수 - 내 코드 안에 들어있음
커널 함수 - 커널에 들어있음

프로그램의 실행
사용자 정의 함수 / 라이브러리 함수 실행
→ CPU 제어권 - user mode
시스템 콜
→ CPU 제어권 운영체제로 넘어감 - kernel mode
프로그램이 실행될 때 mode bit이 user mode, kernel mode 반복

댓글