YJcode :: YJcode

클라이언트/서버 응용프로그램이란 2개의 요소 프로세스로 나뉘어 있는 응용 프로그램을 말한다.

 

  • 클라이언트는 설버에게 요청 메시지를 보내어 어떤 서비스를 수행하라고 요청한다.
  • 서버는 클라이언트의 요청을 검사하고, 적절한 동작을 수행한 뒤, 클라이언트에게 응답 메시지를 보낸다.

 

클라이언트와 서버는 요청과 응답으로 이뤄진 확장된 대화에 참여하기도 한다.

일반적으로 클라이언트 응용 프로그램은 사용자와 상호작용하는 데 비해, 서버 응용프로그램은 공유 자원에 대한 접근을 제공한다. 보통 하나 또는 소수의 서버 프로세스와 통신하는 다수의 클라이언트 프로세스가 존재한다.

클라이언트와 서버는 같은 호스트 컴퓨터 내에 존재하기도 하고, 네트워크로 연결된 서로 다른 호스트에 존재하기도 한다. 서로 통신하기 위해 클라이언트와 서버는 IPC통신 메커니즘을 사용한다.

서버는 다음과 같은 다양한 서비스를 구현할 수 있다.

 

  • 데이터베이스나 기타 공유 정보 자원에 대한 접근을 제공
  • 네트워크로 연결된 원격 파일에 대한 접근을 제공
  • 비즈니스 로직을 캡슐화
  • 공유 하드웨어 자원에 대한 접근을 제공
  • 웹페이지를 제공

 

단일 서버 내의 서비스를 캡슐화하면 다음과 같은 여러 이유로 편리하다.

 

  • 효율성 : 같은 자원을 컴퓨터마다 제공하는 것보다 서버가 관리하는 하나의 제원을 제공하는 편이 비용이 덜 든다.
  • 제어, 조정, 보안 : 자원을 한곳에 둠으로써, 서버가 자원에 대한 접근을 조정하거나, 선택된 클라이언트만 접근할 수 있도록 보안 장치를 둘 수 있다.
  • 이종 환경에서 동작 : 네트워크상의 다양한 클라이언트와 서버가 각기 다른 하드웨어와 OS에서 동작할 수 있다.

 

실시간 응용 프로그램은 입력에 대해 빠른 시간 안에 응답해야 하는 응용 프로그램이다. 흔히 그런 입력은 외부 센서나 특수한 입력 디바이스로부터 들어오고, 출력은 외부 하드웨어를 제어하는 형태를 취한다. 실시간 응답을 요구하는 응용프로그램으로는 자동 조립라인, 은행 ATM, 항공기 항법장치 등 많이 있다.

많은 실시간 응용프로그램이 입력에 대해 빠른 응답을 요구하지만, 결정적인 요소는 이벤트 발생 뒤 응답이 특정 데드라인 안에 전달됨이 보장되는지이다.

실시간 응답성을 제공하기 위해서는 , 특히 짧은 응답 시간이 요구될 때, 하부에 있는 운영체제의 지원이 필요하다. 대부분의 운영체제는 그런 지원을 제공하지 않는데, 실시간 응답성이 다중 사용자 시분할 운영체제의 요구사항과 충돌할 수 있기 때문이다. 전통적인 유닉스 구현은 실시간 운영체제가 아니지만, RTOS버전이 만들어졌다. 리눅스의 RTOS 버전도 만들어졌고, 최근의 리눅스는 그 자체로서 실시간 응용 프로그램을 완전히 지원하는 방향으로 발전하고 있다.

POSIX.1b는 실시간 응용 프로그램을 지원하기 위해 비동기 I/O, 공유 메모리, 메모리에 매핑된 파일, 메모리 잠금, 실시간 클록과 타이머, 대체 스케줄링 정책, 실시간 시그널, 메시지 큐, 세마포어 등 여러 확장 기능을 정의하고 있다. 엄격히 실시간으로 인정되지는 않아도, 대부분의 유닉스 구현은 현재 이들 확장 기능의 일부 또는 전부를 지원한다.

'리눅스 > 기본개념 및 용어' 카테고리의 다른 글

/proc 파일 시스템  (0) 2019.09.26
가상 터미널, 날짜와 시간  (0) 2019.09.25
세션, 제어 터미널, 제어 프로세스  (0) 2019.09.24
스레드, 프로세스 그룹, 쉘 작업 제어  (0) 2019.09.23
시그널  (0) 2019.09.23

가상 터미널은 마스터와 슬레이브라는, 연결된 가상 디바이스의 쌍이다. 이 디바이스 쌍은 두 디바이스 사이에서 양방향으로 데이터를 전송할 수 있는 IPC 채널을 제공한다.

가상 터미널의 핵심은 슬레이브 디바이스가 터미널처럼 동작하는 인터페이스를 제공함으로써, 터미널 중심 프로그램이 슬레이브 디바이스에 연결해서 마스터 디바이스에 연결된 또 다른 프로그램을 통해 터미널 중심 프로그램을 구동할 수 있다는 점이다. 드라이버 프로그램의 출력은터미널 드라이버가 수행하는 일반적인 입력과정을 거친 뒤에 슬레이브에 연결된 터미널 중심 프로그램에 입력으로 전달된다. 터미널 중심 프로그램이 슬레이브로 출력하는 것은 모두 드라이버 프로그램으로 전달된다. 다시 말해서 드라이버 프로그램이 보통은 사용자가 일반 터미널에서 수행하는 일을 수행하는 것이다.

가상 터미널은 다양한 응용 프로그램에서 활용되는데, 특히 X윈도우 시스템에서 제공되는 터미널 윈도우의 구현, 텔넷과 ssh같은 네트워크 로그인 서비스를 제공하는 응용프로그램에 주로 쓰인다.

 

프로세스와 관련된 시간에는 두 가지가 있다.

 

  • 실제 시간은 어떤 ㄴ표준 시점으로부터 측정한 시간또는 어떤 정해진 시점, 일반적으로 프로세스의 시작부터 측정한 시간이다. 유닉스 시스템에서 달력 시간은 UTC 1970년 1월 1일부터 흐른 초를 기준으로 측정하고, 영국 그리니치를 지나는 경선에 따라 정의된 시간대에 따라 조정된다. 유닉스 시스템의 탄생일과 가까운 이 날짜를 기원이라고 한다.
  • 프로세스 시간은 CPU 시간이라고도 하는데, 프로세스가 시작된 이래 사용한 CPU시간의 총량이다. CPU시간은 다시 커널모드에서 코드를 실행하는데 소비한 시간인 시스템 CPU시간과ㅣ, 사용자 모드에서 코드를 실행하는데 소비한 시간인 사용자 CPU시간으로 나뉜다.

 

time명령은 파이프라인에 들어 있는 프로세스들을 실행하는데 소요된 실제 시간, 시스템 CPU시간, 사용자 CPU시간을 보여준다.

세션은 프로세스 그룹의 묶음이다. 특징으로는 아래 몇가지를 들 수 있다.

 

  • 세션 내 모든 프로세스는 동일한 세션 ID를 가지고 있다.
  • 세션 리더는 세션을 만든 프로세스이고, 그 프로세스 ID가 세션 ID 가 된다.
  • 세션은 주로 작업 제어 쉘에서 쓰인다.
  • 작업 제어 쉘에서 만든 모든 프로세스 그룹은 쉘과 동일한 세션에 속하고, 쉘은 세션 리더가 된다.

 

세션에는 보통 연관된 제어 터미널이 있다. 제어 터미널은 세션 리더 프로세스가 처음 터미널 디바이스를 열 때 설정된다. 대화형 쉘이 만든 세션의 경우, 제어 터미널은 사용자가 로그인한 터미널이다. 터미널은 최대한 세션의 제어 터미널이 될 수 있다.

제어 터미널을 열면 세션 리더가 그 터미널의 제어 프로세스가 된다. 터미널이 끊어지면 제어 프로세스는 SIGHUP 시그널을 받는다.

어느 싲점에서든 세션 내 프로세스 그룹 중 하나는 포그라운드 프로세스 그룹으로서 터미널에서 입력을 받을 수 있고, 터미널로 출력을 보낼 수 있다. 사용자가 제어 터미널에서 인터럽트 문자나 중지문자를 입력하면, 터미널 드라이버는 포그라운드 프로세스 그룹을 종료시키거나 중지시키는 시그널을 보낸다. 세션은 임의 개수의 백그라운드 프로세스 그룹을 가질 수 있는데 명령끝에 & 문자를 붙여 만든다.

작업 제어 쉘은 모든 작업을 나열하고, 작업에게 시그널을 보내고, 작업을 포그라운ㄷ드와 백그라운드로 전환하는 명령을 제공한다.

+ Recent posts