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

⊕ 참고로 GUI가 없고 CUI만 있는 리눅스 서버도 있습니다.
유저프로그램 ----> 시스템콜(커널모드로 변경) --> 파일시스템 --> (유저모드로 다시 변경) --> 유저프로그램
이런 식으로 중간에서 유저모드/커널모드를 변경시켜줌
modebit은 1또는 0의 값을 가지는 플래그 변수왜 값이 나눠져있는가??
중간에 하나의 로직을 넣어서 직접적으로 작동하는 것을 막아줌=> 의도치 않은 행동 방어
컴퓨터는 cpu,dma,컨트롤러,메모리,타이머,디바이스 컨트롤러등으로 이루어져있습니다.
cpu연산 처리 방법
- 제어장치가 메모리에 계산할 값을 로드 후 레지스터에도 로드
- 제어장치가 레지스터에 있는 값을 계산하라고 산술논리장치에 명령
3.제어장치가 계산된 값을 다시 레지스터에서 메모리로 계산한 값을 저장
//그림이 이해 잘안됨!
메모리 계층 종류
캐치매핑:
캐치매칭이란 캐시가 히트되기위해 매핑하는 방법
---> 좀 더 찾아보기
웹브라우저의 캐시
가상 메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것.
가상적으로 주어진 주소를 가상 주소
실제 메모리상에 있는 주소를 실제주소라 합니다.
해결법?
메모리를 늘리기
HHD. ===> SSD로 변경
작업세트
PFF =>>???
메모리에 프로그램을 할당할 때는 메모리 위치,메모리의 할당 크기를 기반으로 할당하는데
연속할당과 불연속할당으로 나뉨
: 메모리에 연속적으로 공간을 할당하는 것
1.고정 분할 방식 :융통성이 없고 내부단편화 발생
2.가변 분할 방식: 내부단편화 x,외부단편화가 발생
1.페이징
2.세그멘테이션
3.페이지드 세그멘테이션
프로세스는 컴퓨터에서 실행되고 있는 프로그램으로 cpu 스케줄링의 대상이 되는 작업이라는 용어와 같은 의미입니다.
스레드 프로세스 내 작업 흐름
프로세스와 컴파일 과정

소스코드의 주석을 제거 및 헤더파일을 병합하여 매크로를 치환
오류처리, 코드 최적화 작업을 하며 어셈블리어로 변환
어셈블리어는 목적 코드로 변환됩니다.
프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행파일을 만듭니다.
정적 라이브러리 & 동적 라이브러리
정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하느 모든 코드를 실행 파일에 넣는 방식, 시스템환경 등 외부 의존도가 낮은 장점이 존재하지만 코드 중복등 메모리 효율성이 떨어지는 단점 존재
동적 라이브러리 : 프로그램 실행 시 필요할때만 DLL이라는 함수 정보를 통해 참조하는 방식, 메모리 효율성에서 큰 장점이 존재하나, 외부의존도가 높아지는 단점 존재한다.
스택/힙/데이터영역/코드영역
사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간
컴파일(compile) 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 되어있다.
전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간
데이터영역은 BSS영역과 Data영역으로 나뉘고, BSS영역은 초기화가 되지 않는 변수가 0으로 초기화되어 저장되며 DATA영역은 0ㅇ이 아닌 다른 값으로 할당된 변수들이 저장됩니다.
전역 변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 바뀐다. 전역변수가 변경 될 수도 있어 Read-Write로 되어있다.
스택에는 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 '동적'인 특징을 가집니다.
이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라진다. 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법을 따른다.
컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없다. 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생한다.
힙은 동적할당할때 사용되며 런타임 시 크기가 결정됩니다. 예를 들어 벡터같은 동적 배열은 당연히 힙에 동적할당 됩니다.
프로그래머가 필요할 때마다 사용하는 메모리 영역
pcb이해 아직 xxx
여러개의 프로세스 즉 멀티프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것을 말합니다
스레드는 프로세스의 실행가능한 가장 작은 단위 프로세스는 여러 스레드를 가질 수 있습니다.
멀티스레딩은 프로세스 내 작업을 여러개의 스레드, 멀티스레드로 처리하는 기법 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높습니다.
js가 싱글스레드로 기억..