운영체제

안윤경·2023년 1월 26일

3.1운영체제와 컴퓨터

운영체제란?

운영체제(Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임입니다.

운영체제의 역할과 구조

  1. cpu 스케줄링과 프로세스 관리
  2. 메모리 관리
  3. 디스크 파일관리
  4. I/O디바이스 관리

운영체제의 구조

⊕ 참고로 GUI가 없고 CUI만 있는 리눅스 서버도 있습니다.

시스템콜

  • 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 씁니다.

유저프로그램 ----> 시스템콜(커널모드로 변경) --> 파일시스템 --> (유저모드로 다시 변경) --> 유저프로그램

이런 식으로 중간에서 유저모드/커널모드를 변경시켜줌

modebit

  • 시스템콜이 작동될때 modebit을 참고해 유저모드와 커널모드를 구분합니다.
    modebit은 1또는 0의 값을 가지는 플래그 변수

왜 값이 나눠져있는가??

중간에 하나의 로직을 넣어서 직접적으로 작동하는 것을 막아줌=> 의도치 않은 행동 방어

3.1.2 컴퓨터의 요소

컴퓨터는 cpu,dma,컨트롤러,메모리,타이머,디바이스 컨트롤러등으로 이루어져있습니다.

cpu

  • cpu는 산술논리연산장치,제어장치,레지스터로 구성되어 있는 컴퓨터장치를 의미합니다.

제어장치

  • 제어장치는 프로세스 조작을 지시하는 cpu의 한 부품입니다.

레지스터

  • 레지스터는 cpu안에 있는 매우 빠른 임시기억장치(연산이 매우 빠름)

산술논리연산장치

  • 산술논리연산장치는 덧셈,뺄셈같은 두 숫자의 산술 연산과 배타적 논리합,논리곱 같은 논리 연산을 계산하는 디지털 회로

cpu연산 처리 방법

  1. 제어장치가 메모리에 계산할 값을 로드 후 레지스터에도 로드
  2. 제어장치가 레지스터에 있는 값을 계산하라고 산술논리장치에 명령
    3.제어장치가 계산된 값을 다시 레지스터에서 메모리로 계산한 값을 저장
    //그림이 이해 잘안됨!

인터럽트

  • 인터럽트는 어떤 신호가 들어왔을 때 cpu를 잠깐 정지시키는것을 의미
    종류
    1.하드웨어 인터럽트
    2.소프트웨어 인터럽트

3.2메모리

메모리 계층 종류

  • 레지스터 : cpu안에 있는 작은 메모리,휘발성,속도 가장빠름 기억용량이 가장 적다
  • 캐시 : L1,L2캐시를 지칭 휘발성,속도 빠름 기억용량이 적다
  • 주기억장치: RAM을 가리킴 휘발성,속도 보통 기억용량 보통
  • 보조기억장치: HDD,SSD 비휘발성,속도 낮음 기억용량이 가장 많다

캐치히트와 캐치미스

  • 캐치히트 : 캐시에서 원하는 데이터를 찾은 것
  • 캐치미스 : 해당 데이터에 캐시가 없다면 주메모리로 가서 데이터를 찾아오는 것

캐치매핑:
캐치매칭이란 캐시가 히트되기위해 매핑하는 방법

  • 직접매핑
  • 연관매핑
  • 집합 연관 매핑

---> 좀 더 찾아보기

웹브라우저의 캐시

  • 쿠키
  • 로컬스토리지
  • 세션스토리지

3.2.2 메모리관리

가상메모리란?

가상 메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것.

가상적으로 주어진 주소를 가상 주소
실제 메모리상에 있는 주소를 실제주소라 합니다.

페이지 폴트

  • 페이지 폴트란 프로세스의 주소 공간에는 존재하지만 지금 이컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생

스레싱

  • 스레싱은 메모리의 페이지 폴트율이 높은 것을 의미 =>이는 컴퓨터의 심각한 성능저하 초래

해결법?

메모리를 늘리기
HHD. ===> SSD로 변경
작업세트
PFF =>>???

메모리 할당

메모리에 프로그램을 할당할 때는 메모리 위치,메모리의 할당 크기를 기반으로 할당하는데
연속할당불연속할당으로 나뉨

연속할당

: 메모리에 연속적으로 공간을 할당하는 것
1.고정 분할 방식 :융통성이 없고 내부단편화 발생
2.가변 분할 방식: 내부단편화 x,외부단편화가 발생

불연속 할당

1.페이징
2.세그멘테이션
3.페이지드 세그멘테이션

3.3프로세스와 스레드

프로세스는 컴퓨터에서 실행되고 있는 프로그램으로 cpu 스케줄링의 대상이 되는 작업이라는 용어와 같은 의미입니다.
스레드 프로세스 내 작업 흐름

프로세스와 컴파일 과정

전처리

소스코드의 주석을 제거 및 헤더파일을 병합하여 매크로를 치환

컴파일러

오류처리, 코드 최적화 작업을 하며 어셈블리어로 변환

어셈플러

어셈블리어는 목적 코드로 변환됩니다.

링커

프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행파일을 만듭니다.

정적 라이브러리 & 동적 라이브러리
정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하느 모든 코드를 실행 파일에 넣는 방식, 시스템환경 등 외부 의존도가 낮은 장점이 존재하지만 코드 중복등 메모리 효율성이 떨어지는 단점 존재
동적 라이브러리 : 프로그램 실행 시 필요할때만 DLL이라는 함수 정보를 통해 참조하는 방식, 메모리 효율성에서 큰 장점이 존재하나, 외부의존도가 높아지는 단점 존재한다.

프로세스의 메모리 구조

스택/힙/데이터영역/코드영역

code 영역

사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간
컴파일(compile) 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 되어있다.

data 영역

전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간
데이터영역은 BSS영역과 Data영역으로 나뉘고, BSS영역은 초기화가 되지 않는 변수가 0으로 초기화되어 저장되며 DATA영역은 0ㅇ이 아닌 다른 값으로 할당된 변수들이 저장됩니다.
전역 변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 바뀐다. 전역변수가 변경 될 수도 있어 Read-Write로 되어있다.

stack 영역

스택에는 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 '동적'인 특징을 가집니다.

이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라진다. 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법을 따른다.

컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없다. 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생한다.

heap 영역

힙은 동적할당할때 사용되며 런타임 시 크기가 결정됩니다. 예를 들어 벡터같은 동적 배열은 당연히 힙에 동적할당 됩니다.
프로그래머가 필요할 때마다 사용하는 메모리 영역

pcb이해 아직 xxx

멀티프로세싱

여러개의 프로세스 즉 멀티프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것을 말합니다

스레드와 멀티스레딩?

스레드

스레드는 프로세스의 실행가능한 가장 작은 단위 프로세스는 여러 스레드를 가질 수 있습니다.

멀티스레딩

멀티스레딩은 프로세스 내 작업을 여러개의 스레드, 멀티스레드로 처리하는 기법 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높습니다.
js가 싱글스레드로 기억..

profile
프론트엔드 개발자 안윤경입니다

0개의 댓글