운영체제 정리

Choi Wang Gyu·2023년 8월 8일
0

공부를하면서 매번 까먹게 자세하게 알지 못해서 부족하다고 생각하는 부분을 정리한 글입니다. 글은 지식이 추가될때마다 계속 업데이트 됩니다.

데이터 단위

AWS공부하면서 인스턴스용량이라던지 S3등등에서 데이터 단위가 사용된다. 정확하게 어느정도 몰라서 다시 정리를 해본다
bit = 0 || 1
1byte = 8bit
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

프로세스와 쓰레드

프로세스란 보조기억장치에 있던 프로그램(코드파일)이 메모리에 올라와 실행되는 것이다
메모리 : Code, Data, Heap, Stack으로 나누어져있다

  • Code : 실행 명령을 포함하는 코드
  • Data : Static변수 혹은 Global변수
  • Heap : 동적 메모리 영역
  • Stack : 지역변수, 매개변수, 반환 값 등등 일시적인 데이터
  1. 프로그램이 메모리에 올라가면 발생하는일은 다음과 같이 프로그램은 메모리 공간을 확보한다
  2. 프로세스 생성시 PCB블록이 생성된다 (프로세스 상태정보, 프로그램 카운터 등등)

컨텍스트 스위칭

CPU는 한프로세스가 점유하고 있으면 다른 프로세스는 실행상태에 있을수가없다. 그런데, 우리는 슬랙, 인텔리제이, 카카오톡 등등 여러 프로세스를 실행할 수 있다 어떻게 가능한가?
짧은 텀을 반복하면서 전환해서 실행시킨다(컨텍스트 스위칭)

컨텍스트 스위칭 문제점

컨텍스트 스위칭은 매우 빈번하게 일어나면 오버헤드 비용이 발생하여 성능이 저하된다. 오버헤드란 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등을 말한다.

해결방법

그래서 등장한게 경량화된 프로세스 버전인 스레드이다
왜 경량화 인가? 스레드는 공유되는 자원이 있기떄문이다. 코드, 데이터, 힙 영역을 공통된 자원으로 사용하고 스택은 개별로 할당하기 때문에 크기가 적다.
그래서 큰거를 교환하는부분보다 작은 부분을 교환하는게 더 빠르다(다 넣다 뺐다가 아니라 작은부분만 넣다 뺏다하면되는것이)

멀티 프로세스 멀티 스레드

두가지 모두 처리방식의 일종이다. 한 어플리케이션에 대한 처리방식이라고 생각. (크롬, 인터넷 익스플로)
한 어플리케이션에 대해 여러개의 프로세스를 띄어서 처리하는것
한 어플리케이션에 대해 여러개의 스레드를 활용하는것

인터넷 익스플로 사용하면 오류나면 전체다 종료됨(멀티 쓰레드)
반면 크롬은 하나만 종료됨 (멀티 프로세스) - 그래서 메모리 많이 먹음 메모리 많이쓰는만큼 속도는 빠름

멀티코어

멀티코어랑 멀티프로세스 멀티코어는 하드웨어 관점에서 봐야한다.
멀티프로세스랑 멀티쓰레드는 처리방식의 일종이다.
멀티코어와 관련된 키워드는 동시성과 병렬처리이다

  • 싱글코어 : 빠른텀으로 전환이 되면서 실행됨 이 개념이(동시성) 동시에 일어난것처럼 보이게함
  • 멀티코어 : 병렬처리 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순간에 처리할 수 있게 해주는것. 하나이상의 프로세스 혹은 쓰레드가 한꺼번에 처리되는것

CPU

중앙처리장치 라고도 불리며, 컴퓨터의 '두뇌'와 같은 역할을 담당합니다.
즉, 사용자들이 입력한 명령어를 해석하고 연산한 후 그 결과를 제어하는 장치이며, 하드웨어의 메인보드 안에 해당합니다.

서버를 실행시키면 왜 CPU사용량이 올라가는가?

코드가 실행되면 당연히 메모리에 올라가고 cpu를 사용하게 됩니다.

그런데 왜 사용자가 요청을 하면 cpu사용량이 올라가는이유가 무엇일가?

요청 처리: 클라이언트로부터의 요청이 서버에 도착하면, 해당 요청을 처리하기 위해 CPU는 요청을 분석하고 필요한 작업을 수행합니다. 이 과정에서는 URL 라우팅, HTTP 메소드 분석, 요청 데이터 추출 등이 이루어집니다.

애플리케이션 로직 실행: Spring Boot 애플리케이션은 요청을 처리하는 동안 비즈니스 로직을 실행해야 할 수 있습니다. 이는 데이터 가공, 계산, 데이터베이스 작업 등을 포함할 수 있습니다. 이러한 작업은 CPU 자원을 사용하여 처리됩니다.

데이터베이스 및 외부 서비스 호출: 많은 애플리케이션은 데이터베이스나 외부 서비스와 상호 작용해야 합니다. 이러한 작업은 CPU가 관련 작업을 수행하고 응답을 기다리는 동안 CPU 사용량을 증가시킬 수 있습니다.

개인적 생각

사용자로부터 request 받으면 서블릿이 쓰레드로 생성 됩니다. 그리고 그 서블릿이 임무를 마치면 쓰레드는 자동으로 죽게 되는거죠. 근데 이과정에서 예러가 나면 쓰레드는 사라지지 않습니다. 그리고 그 쓰레드가 cpu를 잡아 먹는거죠. 그래서 점점 사용량이 높아지고 그 상태가 계속 지속되는데 또 요청이 들어오니까 나중에 서버가 죽는거 같기도 하다 200개 오면 메모리 다 사용하는데 또 다른 사용자들이 요청하니까 이러한것도 하나의 요청이니 메모리를 다 사용하다 터져버리는거같다 그리고 또 처리해야하는데 이때 GC도 CPU를 사용하니까

동시성

동기 비동기

메모리 (스왑메모리)

참고자료

https://www.youtube.com/watch?v=1grtWKqTn50&t=418s

profile
도파민 채우기

0개의 댓글