워밍업클럽CS2기 1주차 발자국: 운영체제
운영체제
운영체제 들어가기
운영체제 개요
운영체제가 하는 일
프로세스 관리
메모리 관리
하드웨어 관리
파일 시스템 관리
운영체제의 구조
커널
프로세스와 메모리, 저장장치를 관리하는 운영체제 핵심기능을 담당
사용자는 운영체제 커널에 직접 접근할 수 없고, GUI나 CLI 등 인터페이스를 통해 접근 가능하다.
시스템콜
사용자로부터 커널을 보호하기 위한 인터페이스
시스템 콜을 통해서 어플리케이션 접근
사용자와 어플리케이션은 커널과 인터페이스로 시스템콜을 사용함
드라이버
하드웨어와 커널의 인터페이스
ex) 디바이스 드라이버
컴퓨터 하드웨어와 구조
버스
데이터를 전달하는 통로로 cpu와 메모리를 연결함
메인보드
하드웨어를 연결하는 장치
메인보드의 버스가 장치 간의 데이터 전송을 담당
CPU
중앙처리장치로 ALU(산술논리연산장치), 제어장치, 레지스터 등으로 구성되어있다.
레지스터
계산을 위해 데이터를 임시로 보관하는 장치
RAM
저장된 위치와 상관없이 읽는 속도가 같음.
전력이 끊기면 데이터 손실
메인 메모리로 사용한다.
ROM
전력이 끊겨도 데이터 손실 없다.
데이터를 한 번 쓰면 수정이 불가함.
바이오스 저장용
컴퓨터의 부팅과정
전원버튼을 누른다.
ROM에 저장된 바이오스를 시작한다.
하드웨어 이상 유무 체크
부트로더 실행
운영체제 메모리로 불러옴
인터럽트
폴링 방식 단점 해결
CPU는 명령을 내리고 완료되면 신호를 받아 인터럽트 서비스 루틴을 작업시켜 작업을 완료함.
인터럽트 서비스 루틴은 특정 인터럽트가 들어오면 인터럽트를 처리하는 함수로 비동기적으로 동작하여 성능에 이점이 있음.
프로세스와 쓰레드
프로그램과 프로세스
프로그램
저장장치에 저장된 명령문의 집합체로, 저장장치만 사용하는 수동적인 존재
프로세스
하드디스크에 저장된 프로그램이 메모리에 올라간 상태로, 실행중인 프로그램
메모리, CPU 스케줄링 알고리즘에 따라 CPU도 사용, 입출력 하는 능동적인 존재
CODE, DATA, HEAP, STACK 영역으로 나누어짐
CODE 영역 : 실행하는 코드 저장
DATA 영역: 전역변수와 정적 변수 저장
HEAP 영역: 런타임 시 할당할 수 있는 공간 (동적으로 메모리 할당)
STACK 영역: 지역변수와 함수호출 했을 때 필요한 정보 (매개변수와 돌아갈 주소) 저장
컴파일 과정
전처리기 -> 매크로로 정의한 숫자 치환 및 필요한 파일 불러옴
컴파일러 -> 어셈블리어로 변환
어셈블리어 -> 기계어로 변환
링커 -> 링킹 : 여러가지 라이브러리나 다른 소스코드로 연결
.exe로 만들어짐
메모리에 올라가는 프로그램이 되어 프로세스가 됨 -> 운영체제에 의해 관리
멀티프로그래밍과 멀티프로세싱
유니프로그래밍
메모리에 프로세스 1개
멀티프로그래밍
메모리에 여러개 프로세스
멀티프로세싱
CPU가 여러개의 프로세스를 처리함
메모리가 작았던 과거에는 스와핑 활용
스와핑: 메모리에 있는 데이터를 다른 저장장치로 보내고 다른 저장장치에서 메모리에 올림
PCB
프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장함
연결리스트 자료구조로 저장됨
프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB를 제거함
구조 : 프로그램카운터, 레지스터 정보 등
프로세스 상태
생성상태: PCB를 생성하고 메모리에 프로그램 적재 요청 -> 승인
준비상태: CPU 스케줄러에 의해 CPU 할당
실행상태: 실행상태에 있는 프로세스의 수는 CPU 갯수 -> (초과 시 강제로 뺏고 준비상태로 돌아감)
인터럽트: CPU가 명령어를 수행하다 자신이 처리할 수 없는 명령이면 스스로 인터럽트를 건다. -> CPU는 하던 일을 멈추고 해당 인터럽트를 처리하려고 함
대기상태: 입출력 요청 시 완료될 때까지 기다림
완료상태: 프로세스 종료, 사용한 데이터 메모리에서 제거, 생성된 PCB 제거
컨텍스트 스위칭
프로세스 실행 중 다른 프로세스를 실행하기 위해 실행중인 프로세스 상태 저장, 다른 프로세스의 상태값으로 교체
CPU 점유시간이 끝났거나, I/O 요청이 있거나 인터럽트가 있을 때 발생
컨텍스트 스위칭 하는 상황
프로세스 A의 점유 시간동안 실행 -> 초과 -> 인터럽트 발생 -> CPU 레지스터 값 등을 PCB A 저장 -> 프로세스 B 레지스터 값을 세팅 -> 프로그램 카운터(명령어 주소를 가지고 있음) 를 가지고 있어 명령어 바로 실행 가능 -> 프로세스 B 시간초과 -> 인터럽트 발생 -> 다시 프로세스 A 실행
프로세스 생성과 종료
프로세스 생성
운영체제 부팅 후 0번 프로세스가 생성될 때 딱 한 번 실행됨
다른 프로세스(자식 프로세스)들은 fork() 함수를 사용하여 0번 프로세스(부모 프로세스)의 코드영역, 데이터 영역, 스택영역 등 PCB 내용 모두 복사해서 사용 => 생성보다 복사가 빠름
과정:
.exe 파일 클릭 -> 운영체제는 프로그램의 코드영역과 데이터 영역을 메모리에 로드, 빈 스택과 빈 힙을 만들어 공간 확보 -> 관리하기 위한 PCB 생성 후 값 초기화
프로세스 종료
컴퓨터 껐다 키면 메모리가 초기화됨
쓰레드
쓰레드는 프로세스 내부에 위치, 프로세스 내의 쓰레드 : 운영체제가 작업을 처리하는 단위
한 프로세스 내의 쓰레드들은 그 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유함
장단점
안정성(프로세스 > 쓰레드)
프로세스는 독립적으로 하나의 프로세스에 문제 생겨도 다른 프로세스는 영향 없음, 쓰레드는 해당 프로세스에 문제가 생기면 프로세스 내부의 모든 쓰레드에 영향있음.
속도와 자원
프로세스 간 통신은 오버헤드가 크고 속도가 느림
스레드는 오버헤드가 작고 쉽게 공유할 수 있으나 공간에 문제가 생길 수 있음
CPU 스케줄링
CPU 스케줄링 개요
CPU 스케줄링
운영체제는 모든 프로세스에게 CPU를 할당 및 해제하는 행위
컴퓨터 성능에 큰 영향을 미침
다중큐
프로세스 정보를 담고 있는 PCB는 준비상태의 다중큐에 들어가서 실행되기를 기다리고 CPU 스케줄러에 의해 실행상태로 전환됨
CPU 스케줄러는 준비상태의 다중큐를 참조하여 어떤 프로세스를 실행시킬지 결정
스케줄링 목표
사용자가 사용하는 시스템에 따라 스케줄링 목표가 달라짐
FIFO
First In First Out : 먼저 들어온 작업이 먼저 나간다
스케줄링 큐에 들어온 순서대로 CPU를 할당 받음 -> 먼저 들어온 프로세스 종료 후 다음 프로세스 실행
장점
단순함, 직관적
단점
한 프로세스가 끝나야 프로세스가 시작됨
실행시간이 짧고 늦게 도착한 프로세스가 실행시간이 길고 빨리 도착한 프로세스의 작업이 끝날 때까지 기다려야함 => 평균 대기 시간이 길어지면서 스케줄링 성능이 안 좋을 수 있음.
댓글을 작성해보세요.