[운영체제] 5. CPU 스케줄링
·
운영체제
프로세스의 실행단위인 스레드를 실행할 때 어떤 스레드를 실행할지 스케줄링을 통해 선택된다고 설명해왔었다.  이제 그 스케줄링이 무엇인지 그리고 어떤 스케줄링 알고리즘들이 존재하는지 알아보자.  1. 스케줄링 개요 한정된 자원에 대한 경쟁이 있을 때 우린 누구에게 자원을 할당해줘야 할지 선택해야 한다. 즉 CPU 자원을 누구에게 할당할 것인지 결정하는 것이 CPU 스케줄링인 것이다. 여기서 선택의 대상이 되는 스레드는 '준비' 상태에 있는 스레드들이다.  스케줄링이 필요하게 배경에는 다중 프로그래밍의 등장이 있다. CPU가 쉬는시간인 CPU 유휴 시간을 줄이기 위해 만들어진 다중 프로그래밍 기법은 I/O이 발생하면 실행하고 있는 프로세스를 중단하고 다른 프로세스를 실행한다.  그런데 어떤 프로세스를 메모리..
[운영체제] 4. 스레드와 멀티 스레딩
·
운영체제
이전 포스팅에서 프로세스와 프로세스 생명주기 등 프로세스가 OS에 의해 어떻게 관리되는지 알아봤었다. 그리고 스레드가 프로세스보다 더 작은 단위로서 프로세스를 실행하는 단위가 된다는 것도 알아보았다. 그럼 이번에는 그 스레드가 도대체 무엇인지 더 자세히 알아보도록 하겠다.  4 - 1 프로세스의 문제점 컴퓨터가 처리하고자 하는 일의 단위를 작업(task)라고 한다. 이 task는 프로세스를 만들어내며,1980년대까지 Unix기반 OS의 실행 단위는 프로세스였다.  그런데 프로세스가 실행단위일 때 생기는 문제점이 존재했다.먼저, 1) 프로세스 생성에 걸리는 시간이 크다는 것이다. 이는 프로세스를 생성할 때 큰 오버헤드를 가져온다는 것을 의미한다. 이전에 알아보았지만 프로세스를 생성하는 과정은 메모리 할당,..
[운영체제] 3. 프로세스와 프로세스 관리
·
운영체제
3 -1. 프로그램과 프로세스이제 프로그램과 프로세스에 대해서 본격적으로 알아볼 때 가 된 것 같다.이 전에도 말했겠지만  프로그램은 하드디스크, USB등 저장 장치에 저장된 실행 가능한 파일을 말한다. 프로그램이 메모리에 적재되어 실행중일 때 이를 프로세스라고 부른다. 여기서 실행중이라는 것은 CPU에 의해 실행되거나, 준비 상태이거나, 실행 대기 상태이거나. 이 모든 상태를 실행 중이라고 말한다.  즉 OS는 응용프로그램을 메모리에 적재하고 ,이때 부터 프로세스라고 부를 수 있는 것이다.  프로세스의 특징을 알아보자.OS는 프로르램을 메모리에 적재하고 이를 프로세스라고 한다. OS는 프로세스에게 필요한 메모리를 할당하고 코드와 데이터들을 적재한다.프로세스는 서로 독립적인 메모리 공간을 갖는다(가상 메..
[Spring 핵심 원리 이해] 8. 빈 스코프
·
Spring
빈 스코프란 말 그대로 빈의 범위, 빈이 존재할 수 있는 범위를 뜻한다. 지금까지 우리는 스프링이 기본적으로 제공해주는 싱글톤 스코프를 사용해왔다. 스프링은 다음 같은 다양한 스코프를 지원한다. 싱글톤: 기본 스코프. 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 짧은 범위의 스코프.웹 관련 스코프request: 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프빈의 스코프는 @Scope("protoytype") 과같이 애노테이션으로 지정할 ..
[Spring 핵심 원리 이해] 7. 빈 생명주기 콜백
·
Spring
데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화 종료 작업이 필요하다.  이번 시간에는 스프링을 통해 이러한 초기화 작업과 종료 작업이 어떻게 진행되는지 알아보겟다.  간단하게 외부 네트워크와 미리 연결할 객체를 하나 만들어보자. 이 객체는 애플리케이션시작 시점에 connect()를 호출해서 연결을 맺어두고, 애플리케이션이 종료되면 disConnect를 호출해서 연결을 끊어야 한다.  package hello.core_review.lifecycle;public class NetworkClient { private String url; public NetworkCli..
[운영체제] 2. 컴퓨터 시스템과 운영체제
·
운영체제
2-1 컴퓨터 시스템과 하드웨어  시스템 계층 구조 컴퓨터 시스템은 다음과 같은 3개의 요소들이 층을 이루고 있다.   컴퓨터의 시스템 계층 구조는 다음과 같은 특징을 가지고 있다. 1. 사용자는 응용프로그램이나 OS 패키지에 포함된 GUI와 도구 프로그램을 통해 컴퓨터를 활용한다.2. 하드웨어는 OS의 베타적이고 독립적인 지배를 받는다.3. 어떤 사용자나 응용프로그램도 직접 하드웨어에 접근할 수 없다. 오직 운영체제를 통해서만 접근 가능하다.  OS는 응용프로그램과 하드웨어 사이에서 중계자 역할을 수행한다. 즉 하드웨어를 사용하는 사람이 하드웨어에 대해 잘 알지 못해도 사용할 수 있도록 추상화시켜준다고 생각할 수 있다.   하드웨어컴퓨터 하드웨어를 좀 더 자세히 살펴보겠다.   컴퓨터는 크게 CPU, ..
[Spring 핵심 원리 이해] 6. 의존관계 자동 주입
·
Spring
저번 시간 컴포넌트 스캔에 대해 알아보면서 Component Scan이 어떻게 스프링 빈을 동록하고 관리하는지, 어떻게 사용하는지 알아보았다. 그리고 @Autowired라는 애노테이션을 사용해서 자동 의존관계 주입을 사용해 보았는데, 이번 시간에는 자동 의존관계 주입에 대해서 더 자세히 일아보도록 하겠다.  의존관계 주입 방법 의존관계를 주입하는 방식은 크게 4가지가 있다. 생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입 생성자 주입은 지금까지 우리가 사용하던 의존관계 주입 방법이다. 생성자를 통해서 의존관계를 주입하는 것으로 생성자 위에 @Autowired 를 붙여주면 된다.그런데 생성자가 하나라면 @Autowired를 생략 가능하다.  생성자 주입생성자 주입의 특징은  1. 생성자..
[Spring 핵심 원리 이해] 5. 컴포넌트 스캔
·
Spring
저번 시간 우리는 싱글톤 패턴이 무엇인지 그리고스프링 컨테이너가 어떻게 싱글톤 패턴을 보장해줄 수 있는지에 대해 이야기 해보았다. 스프링 컨테이너는 @Configuration이 붙은 클래스의 스프링 빈 메서드를 CGLIB 라이브러리를 통해서 같은 인스턴스 객체를 반화하도록 도와준다.  이번 시간에는 스프링 빈을 등록할 때 설정 정보 없이 자동으로 스프링 빈을 등록할 수 있는 컴포넌트 스캔이라는 기능에 대해서 알아보도록 하겠다. 또한 의존 관계를 자동으로 주입해주는 @Autowired 기능도 알아볼 것이다.  1. 컴포넌트 스캔 시작  먼저 AutoAppConfig.java 파일을 하나 만들어주자  package hello.core_review;import org.springframework.context..