ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BEB Section 2 - 컴퓨터 공학 기초
    2nd of BEB/Codestates 2021. 12. 23. 02:23

     

    1️⃣ 운영체제

    시스템 자원 관리

     운영체제가 없다면 응용 프로그램은 실행될 수 없다. 응용 프로그램은 컴퓨터를 이용해 다양한 작업을 하는 것이 목적이고, 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 도와준다.

     

    • 하드웨어를 구성하는 일하는 CPU
    • 자료 저장을 위한 RAM, 디스크

     

    이 모든 게 운영체제에 포함된다.

     

    응용 프로그램 관리

     모든 응용 프로그램이 시스템 자원을 무자비하게 사용하면 해커에 의해 공격에 무방비한 상태가 된다. 악의적 목적을 가진 프로그램이 모든 정보에 접근하거나 특정 앱이 시도때도 없이 실행된다고 생각하면 쉬울 것 같다. 따라서 응용 프로그램은 권한에 대한 관리가 매우 중요하고, 특히 여러 사람이 하나의 기기를 사용하는 경우 사용자 관리하는 일도 중요하다.

     

    2️⃣ 응용 프로그램

     응용 프로그램이 컴퓨터에게 일을 시키기 위해선 운영체제로부터 컴퓨터 조작 권한을 부여받아야 한다. 권한을 부여받은 후에 기능 사용이 가능하다. 응용 프로그램이 운영체제와 소통하기 위해서는 운영체제가 응용 프로그램을 위해 인터페이스, 즉 API를 제공해야 한다. 응용 프로그램이 시스템 자원을 사용할 수 있도록 운영체제에서 다양한 함수를 제공하는 것을 시스템 콜이라고 부른다.

     

    3️⃣ 프로세스

     실행 중인 하나의 애플리케이션이다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션 코드를 실행한다. 이때 실행되는 애플리케이션을 프로세스라고 한다. 

     

    4️⃣ 스레드

     한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 이어둔 것이다. 하나의 스레드는 코드가 실행되는 하나의 흐름이기 때문에 한 프로세스 내 스레드가 두 개라면 코드가 실행되는 흐름이 두 개 생긴다는 뜻이다.

     

    5️⃣ 멀티 스레드

     두 가지 이상의 작업을 동시 처리하는 것을 의미한다. 운영체제는 멀티 태스킹을 할 수 있도록 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행한다. 대용량 데이터 처리시간을 줄이기 위해 데이터를 분할해 병렬로 처리하는 데 사용할 수 있고, 네트워크 통신을 하기 위해 사용할 수도 있다. 그리고 여러 클라이언트의 요청을 처리하는 서버를 개발할 때에도 사용된다.

     

     일단 스레드의 특징을 다시 살펴본다면,

    1. 프로세스 내 실행되는 흐름 단위
    2. 각 스레드마다 call stack 존재 → call stack : 실행중인 서브루틴을 저장하는 자료구조
    3. 각 스레드는 독립적으로 동작

     그래서 멀티 스레딩의 장점은

     

    • 일단 동시 처리하던 일을 스레드로 구현할 경우 메모리 공간과 시스템 자원의 소모가 줄어든다.
    • 스레드 간 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적 할당된 공간인 heap 영역을 이용한다.

     

    1. 프로세스간 통신 방법에 비해 스레드 간 통신 방법이 훨씬 간단하다.
    2. 시스템 처리량 향상
    3. 자원 소모가 줄어들어 프로그램 응답 시간 단축

     

     그래도 문제점은 존재한다.

    1. 프로 세스간 공유하는 자원이 없다.
    2. 서로 다른 스레드가 서로 사용 중인 변수나 자료구조에 접근해 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수도 있다.                          → 동기화 작업 필요

     

    6️⃣ 동시성과 병렬성의 차이

     동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한된다. 운영체제는 각 스레드를 시간에 따라 분할해 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다. 이 방식을 시분할이라고 한다.

    • Concurrency(동시성, 병행성) : 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각하게 한다
    • Parallelism(병렬성) : 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시 수행된다.

     

    7️⃣ Context Switching

     다른 작업들(프로세스나 스레드)이 시작할 수 있도록 이미 실행 중인 작업들을 멈추는 것을 의미한다.

     

    8️⃣ 가비지 컬렉션

     프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것이다.

     

    • 트레이싱 : 한 객체에 flag를 두고 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 방법이다.
      • 객체에 in-use flag를 두고 사이클마다 메모리 관리자가 모든 객체를 추적해 사용 여부를 표시한다. 그 후 표시되지 않은 객체를 삭제하는 단계를 통해 메모리를 해제한다.
    • 레퍼런스 카운팅 : 한 객체를 참조하는 변수의 수를 추적하는 방법이다.
      • 객체를 참조하고 있던 변수의 값이 바뀌거나 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어든다. 카운트가 0이 되면 그 객체와 관련한 메모리는 비울 수 있다. 0이 된다는 것은 아무도 그 객체에 대한 레퍼런스를 가지고 있지 않다는 말과 같다.

     

    9️⃣ 캐시

     많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 말한다. 일반적으로 일시적 데이터를 저장하기 위한 목적으로 존재하는 데이터 저장공간이다. 첫 작업 이후 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장공간에 접근할 때보다 더 빠르게 요청을 처리할 수 있다. 캐싱을 사용하면 이전 검색 결과나 계산한 데이터를 효율적으로 재사용할 수 있다.

     

     캐시 데이터는 일반적으로 빠르게 접근할 수 있는 하드웨어에 저장되고 소프트웨어 구성요소와 함께 사용될 수도 있다. 캐시는 기본 스토리지 계층(SSD나 HDD)에 접근하여 데이터를 가져오는 느린 작업의 요구를 줄이고 검색의 성능을 높인다. 속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터의 하위 집합을 일시적으로 저장한다.

     

     장점으로는

     

    •  애플리케이션 성능 개선
    • DB 비용 절감
    • 백엔드 부하 감소
    • 예측 가능한 성능
    • DB 핫스팟 제거
    • 읽기 처리량 증가
Designed by Tistory.