1. 운영체제(1)

2024. 10. 23. 19:56·Cs

1️⃣운영체제(OS, Operationg System)란?

: 하드웨어 계층과 다른 소프트웨어 계층을 연결하는 소프트웨어 계층. 컴퓨터 시스템의 자원을 관리하고, 사용자가 컴퓨터를 사용할 수 있는 환경을 제공하는 역할을 수행. ex) 윈도우, 맥, 리눅스, 유닉스

2️⃣CPU와 메모리 구조

- CPU(중앙 처리 장치=프로세서): 컴퓨터에서 프로그램을 실행하는 데 필요한 연산을 처리하고 수행.

- 메모리의 구조(2)

    1. 주 기억장치(휘발성 메모리) -> RAM

    2. 보조 기억장치(비휘발성 메모리) -> SSD, HDD

- 메모리의 계층 구조(4)

    1. 레지스터: CPU가 사용자 요청을 처리하는 데 필요한 데이터를 임시로 저장하는 기억장치

    2. 캐시 메모리: CPU와 RAM 사이의 속도 차이를 해결하기 위한 기억장치. CPU 내부에 위치

    3. RAM: 컴퓨터에서 프로그램을 실행할 때 필요한 정보를 저장. 휘발성 기억장치.

    4. 하드 디스크: 사용자가 필요한 데이터와 프로그램을 저장. 비휘발성 기억장치.

- 프로그램을 실행 -> OS가 디스크에 있는 프로그램을 메모리로 로드 -> 로드한 프로그램 = "프로세스" -> CPU가 프로세스 처리(한 번에 하나의 프로세스만 처리 가능!)

3️⃣커널과 시스템 콜

- 커널: 컴퓨터 하드웨어와 프로세스의 보안, 자원 관리, 하드웨어 추상화 수행. 특히 CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 담당.

- 운영체제의 모드(2)

    1. 커널 모드: 하드웨어에 직접 접근해 메모리, CPU와 같은 자원 사용

    2. 사용자 모드: 커널 모드의 중요 자원에 접근할 수 없게 제한 -> 접근 시 "시스템 콜"을 호출해 커널에 요청! -> 시스템 콜을 사용해 프로세스 제어, 파일 조작, 장치 관리, 데이터의 유지 보수, 통신, 보호

4️⃣프로세스의 메모리 영역 구조(4)

1. 스택: 지역 변수, 함수의 매개변수, 반환되는 주소 값 등이 저장되는 영역. 후입선출(LIFO) -> 높은 주소 값에서 낮은 주소 값으로 메모리 할당. 영역 크기는 컴파일 때 결정. 

2. 힙: 사용자에 의해 동적 메모리 할당이 일어나는 영역. 선입선출(FIFO) -> 낮은 주소 값에서 높은 주소 값으로 메모리가 할당. 영역 크기는 런타임 때 결정.

+ 스택과 힙 영역은 동적으로 메모리 할당 가능 -> 두 영역 사이에 빈 메모리 공간 존재(메모리 영역 공유)

 -> 스택 오버플로: 스택이 힙 영역 침범 <-> 힙 오버플로: 힙이 스택 영역 침범 

3. 데이터: 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역. 세부적으로는 BSS(초기화하지 않은 변수 저장), 데이터 영역(초기화한 변수 저장)으로 나눌 수 있음.

4. 코드: 실행할 코드가 기계어로 컴파일되어 저장되는 영역

5️⃣스레드

: 프로세스에서 실제로 실행되는 흐름의 단위

- 프로세스의 메모리 공간 이용. 지역 변수를 저장하는 스택 영역 할당받음.

6️⃣PCB

: 프로세스 제어 블록. 프로세스의 정보(현재 상태, 부모 및 자식 프로세스의 PID(고유의 ID), 우선순위, 메모리 제한 등)를 저장.

7️⃣프로세스의 생성

: 기존 프로세스에서 fork()함수를 호출해 새로운 프로세스 생성. 부모 프로세스에서 fork()함수를 호출하면 부모 프로세스는 자식 프로세스의 PID 값을, 자식 프로세스는 0을 반환.

8️⃣프로세스 상태도

    1. 생성: 프로세스가 PCB를 갖고 있지만 OS로부터 승인받기 전 

    2. 준비: OS로부터 승인받은 후 준비 큐에서 CPU 할당을 기다림

    3. 실행: 프로세스가 CPU를 할당받아 실행함

    4. 대기: 프로세스가 입출력이나 이벤트 발생을 기다려야 해서 CPU 사용을 멈추고 기다림

    5. 종료: 프로세스 실행을 종료함

9️⃣프로세스 변화

- 생성->준비: 프로세스가 OS 승인을 받고 준비 큐에 추가됨

- 준비->실행: 준비 큐에 있는 프로세스 중 우선순위가 높은 프로세스가 디스패치되어 실행됨

- 실행->대기: 입출력 또는 이벤트 때문에 대기 상태로 변경됨

- 대기->준비: 입출력 또는 이벤트가 완료되어 준비 상태로 변경됨

- 실행->종료: 실행 중인 프로세스가 정상적으로 끝나서 종료 상태로 변경됨

🔟멀티 프로세스와 멀티 스레드

- 동시성: 하나의 코어에서 여러 작업을 번갈아 처리하는 방식. CPU는 한 번에 하나의 작업만 처리할 수 있기 때문.

  + 콘텍스트 스위칭: 처리 중인 작업을 교체하는 것

- 병렬성: CPU가 여러 개 있어서 각 CPU에서 각 작업을 동시에 처리하는 방식

1. 멀티 프로세스: 응용 프로그램 하나를 여러 프로세스로 구성하는 것.  -> 이 환경에서는 프로세스들이 서로 영향을 줄 수 없기 때문에 여러 개로 구성하는 것이 안정적!

BUT 시간과 메모리 공간 많이 사용...

+ 오버헤드: 기존에 처리하던 프로세스가 할당받은 메모리 영역을 다른 프로세스에서 사용할 수 있게 교체하면서 시간과 메모리 필요.

+ 프로세스 간 공유할 자원이 있다면 IPC(Inter Process Communication)을 통해 프로세스 간 자원 공유

2. 멀티 스레드: 스레드를 여러 개 생성해 각자 다른 작업을 처리하도록 명령.

- 스레드 간 힙, 데이터, 코드 영역 공유(스택X) -> 콘텍스트 스위칭 시 오버헤드 적게 발생 + IPC 사용X -> 멀티 프로세스 단점 보완! 더 효율적! (+ 스레드 간 자원 공유가 프로세스 간 자원 공유보다 시스템 처리 비용이 적고 프로그램 응답 시간도 단축)

BUT 공유 자원에 대한 동기화가 필수! + 하나의 스레드에 문제가 생기면 다른 스레드에 영향을 미칠 수 있음...

저작자표시 (새창열림)

'Cs' 카테고리의 다른 글

1. 운영체제 (3)  (0) 2024.10.26
1. 운영체제(2)  (0) 2024.10.23
GET과 POST의 차이  (0) 2024.10.15
라이브러리와 프레임워크의 차이  (0) 2024.06.11
IP  (0) 2024.06.11
'Cs' 카테고리의 다른 글
  • 1. 운영체제 (3)
  • 1. 운영체제(2)
  • GET과 POST의 차이
  • 라이브러리와 프레임워크의 차이
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (381)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (1)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    항해99
    99클럽
    Til
    코딩테스트준비
    개발자취업
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
1. 운영체제(1)
상단으로

티스토리툴바