xml地图|网站地图|网站标签 [设为首页] [加入收藏]
鼠标事件,转载文章
分类:操作系统

转载地址:https://my.oschina.net/hosee/blog/673628?p=%7b%7bcurrentPage+1%7d%7d

  1. 新建项目 项目名称:MFCBaseMessage

 

本文将介绍如何在Linux上部署Django + Mysql + Apache环境。我们知道,Django内置的http服务器只能工作在单线程下,做开发和调试时候是可以的,但是生产环境通常都会有多用户并发,而且django的simple HTTP server处理大量静态文件的性能太差,所以要用apache做前端。Django自带的SQLite数据库权限只依赖于文件系统,没有用户帐户的概念,这里我们使用典型的关系型数据库Mysql。看似简单的环境搭建,在实际操作过程中还是遇到了不少的大坑,所以特地将过程记录下来,也希望对大家有小小的帮助。

CentOS 7.5  +  python 2.7.5  + Django 1.11.14  +  Apache 2.4.6  +  Mysql 5.7.23

本文就将系统性的串联起那些知识点,方便复习和回顾。本文适合已经有操作系统基础的同学,一起回顾知识,本文并不详细讲解每个算法,本文意在知识串联。

图片 1

 

通过一个例子来串联所有的知识点:

  1. 选择基本对话框模式,如图 ,点击完成
    图片 2
  2. 最终如图

1. 安装Django

Linux上我们可以直接使用pip安装Django

 

1.1  安装python(使用CentOS 7.5自带的python即可)

[root@localhost ~]# python --version
Python 2.7.5

 

1.2  网上下载get-pip.py文件安装pip:

wget https://bootstrap.pypa.io/get-pip.py

 

1.3  pip安装django

[root@localhost ~]# pip install django
[root@localhost ~]# python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.11.14'

 

写了一个C语言程序:

图片 3

2. 安装Apache

Linux上使用yum安装Apache即可

[root@localhost ~]# yum install httpd
[root@localhost ~]# httpd -V
[Thu Aug 16 20:57:04.487586 2018] [so:warn] [pid 1605] AH01574: module wsgi_module is already loaded, skipping
Server version: Apache/2.4.6 (CentOS)
Server built:   Jun 27 2018 13:48:59
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)

注意:使用yum安装的httpd,其安装目录位于/etc/httpd/,我们只需要配置/etc/httpd/conf/httpd.conf即可

 

#include

4.右键添加类向导

3. 安装Mysql

我们使用yum安装Mysql,需要先更新yum源

 

[root@localhost ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
[root@localhost ~]# rpm -ivh mysql57-community-release-el7-8.noarch.rpm
[root@localhost ~]# yum install mysql-community-server
[root@localhost ~]# yum install mysql-community-devel

 

注意:yum安装的Mysql其文件目录如下

  • 配置文件:/etc/my.cnf
  • 日志文件:/var/log/mysqld.log
  • 服务启动脚本:/usr/lib/systemd/system/mysqld.service
  • socket文件:/var/run/mysqld/mysqld.pid

 

main()
{
  puts("Hello World!n");
}

 

4. 配置(重点)

以上三步都非常容易,但是将这三个环境配置好,还是费了我不少的时间...

4.1  配置Mysql

 

[root@localhost ~]# systemctl start mysqld
# 开启Mysql服务后,会为root设置一个默认密码,我们首先重置密码
# 获得默认密码
[root@localhost ~]# cat /var/log/mysqld.log | grep -i password
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.7.23 MySQL Community Server (GPL)

mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sam_tech_0912';

# 重置密码后,我们创建一个数据库,因为后续django连接Mysql时需要输入数据库名称
mysql> create database Platform default charset=utf8;
Query OK, 1 row affected (0.00 sec)

mysql> quit
Bye

  

4.2  django中配置Mysql

 

django中关于Mysql的配置:

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Platform',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'Sam_tech_0912',
    }
}

 

django中其他的部分的配置:

DEBUG = True

ALLOWED_HOSTS = ["*",]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates"),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

补充:

关于 Error loading MySQLdb module: No module named MySQLdb

--> yum install MySQL-python

 

4.3  配置Apache

 

重点:安装mod_wsgi

[root@localhost ~]# yum install mod_wsgi
[root@localhost ~]# rpm -qa | grep wsgi
mod_wsgi-3.4-12.el7_0.x86_64

 

编辑配置文件 /etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"

# 设定Apache监听的端口号,可以设定多个
Listen 80

# 重点:这句是加载刚刚安装的wsgi模块,有了它django才能部署到Apache上,切记!!!
LoadModule wsgi_module modules/mod_wsgi.so


Include conf.modules.d/*.conf

User apache
Group apache

ServerAdmin root@localhost

ServerName localhost:80

<Directory />
    AllowOverride none
    Require all denied
</Directory>

    DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
    LogFormat "%h %l %u %t "%r" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>

    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz



    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>


EnableSendfile on

IncludeOptional conf.d/*.conf

# 我们在/etc/httpd/conf/下新建httpd-vhosts.conf虚拟主机配置文件,完成对80端口的配置
# 这句是告诉Apache去调用httpd-vhosts.conf
# 虚拟主机中的配置参数将覆盖httpd.conf主配置文件中的设定
Include conf/httpd-vhosts.conf

 

虚拟主机配置文件(关键一步

<VirtualHost *:80>
    ServerAdmin samliuming@aliyun.com
    DocumentRoot "/home/python_projects/Platform"
    ServerName samlinux01-platform.com
    ServerAlias sam-platform.com
    ErrorLog "logs/platform_error.log"
    CustomLog "logs/platform_access.log" common


    WSGIScriptAlias / "/home/python_projects/Platform/Platform/wsgi.py"
    # 一定要定义python-path到项目目录,否则会报出相关模块无法找到的错误,切记!!!
    WSGIDaemonProcess samlinux01-platform.com python-path=/home/python_projects/Platform:/usr/lib64/python2.7/site-packages
    WSGIProcessGroup samlinux01-platform.com
    WSGIScriptReloading On

    # 设定Apache访问django的项目目录

    Alias /static /home/python_projects/Platform/static
    Alias /media /home/python_projects/Platform/media
  # 注意:将python中django admin的静态文件链接到static目录下,否则会出现登录django admin静态文件404的问题
  # ln -s /usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin admin


    <Directory /home/python_projects/Platform/media>
        AllowOverride None
        Options Indexes FollowSymLinks
        Require all granted
    </Directory>
    <Directory /home/python_projects/Platform/static>
        AllowOverride None
        Options Indexes FollowSymLinks
        Require all granted
    </Directory>
    <Directory /home/python_projects/Platform/Platform>
        <Files wsgi.py>
            AllowOverride None
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

注意:每次编辑完成后都需要重启httpd服务使配置生效

[root@localhost ~]# httpd -t
[Thu Aug 16 20:35:06.439115 2018] [so:warn] [pid 1520] AH01574: module wsgi_module is already loaded, skipping
Syntax OK
[root@localhost ~]# systemctl restart httpd.service

 

编辑django中的 wsgi.py文件

"""
WSGI config for Platform project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Platform.settings")

application = get_wsgi_application()

# 添加项目路径到python的环境变量中
# For Apache server
import sys
project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_dir)

 

目的是希望在屏幕中看到Hello World的字样。

 图片 4

至此,大功告成,我们直接可以通过80端口访问我们的项目,虽然上面的步骤简单,但是网上查的资料并没有特别详细完整的,中间还是走了不少的弯路,所以特意将配置步骤记录下来,方便后续再次配置!

 

那么在运行这个C语言程序时,操作系统做了什么呢?

5.添加鼠标事件
图片 5

1. 首先要启动程序执行,用户要告诉操作系统执行程序

 

如何告知:

 6.在ON_LButtonDown添加如下代码:

  • 可以鼠标双击程序
  • 命令行输入命令
  • ……
void CMFCBaseMessageDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO:  在此添加消息处理程序代码和/或调用默认值

 CString str;
 //ZeroMemory(&str, sizeof(CString));
 str.Format(_T("x=%d,y=%d"), point.x, point.y);


 if (MK_CONTROL &&nFlags)
 {
  str += L"您按了ctrl键 ";
 }
 if (MK_SHIFT && nFlags)
 {
  str += L"您按了shift键 ";
 }

 AfxMessageBox(str);
 CDialogEx::OnLButtonDown(nFlags, point);
}

2. 操作系统知道用户的请求之后,就会根据用户提供的文件名到磁盘上找到这个程序的相关信息,找到信息之后,会去检查这个程序是不是一个可执行文件,如果是可执行文件,操作系统会根据程序首部信息来确定代码和数据在可执行文件中的位置并计算出对应的磁盘块地址。

7。查看效果
图片 6

文件系统是指操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用。

 

文件按性质和用途分类:普通文件,目录文件,特殊文件(设备文件),管道文件,套接字。

 8.模拟发送事件

文件的存储介质:磁盘(包括SSD),磁带,光盘,U盘……

1 void CMFCBaseMessageDlg::OnBnClickedButton2()
2 {
3     // TODO:  在此添加控件通知处理程序代码
4 
5     // 0x00010002 叉成0x0001  和   0x0002
6 
7     SendMessage(WM_LBUTTONDOWN, WM_LBUTTONDOWN, 0x00010002);
8 }

物理块是信息存储、传输、分配的独立单位。存储设备划分为大小相等的物理块,统一编号。

9.查看效果

一次访问磁盘的请求:

图片 7

  • 寻道:磁头移动定位到指定磁道。
  • 旋转延迟:等待指定扇区从磁头下旋转经过。
  • 数据传输:数据在磁盘与内存之间的实际传输。

 

SSD没有寻道和旋转延迟的时间消耗,所以速度快。

文件控制块:为管理文件而设置的数据结构,保存管理文件所需的所有有关信息。

常用属性:文件名,文件号,文件大小,文件地址,创建时间,最后修改时间,最后访问时间,保护,口令,创建者,当前拥有者,文件类型,共享计数,各种标志。

文件目录:统一管理每个文件的元数据,以支持文件名到文件物理地址的转换。将所有文件的管理信息组织在一起,即构成文件目录。

目录文件:将文件目录以文件的形式存放在磁盘上。

目录项:构成文件目录的基本单元,目录项可以是FCB,目录是文件控制块的有序集合。

文件的物理结构:文件在存储介质上的存放方式。

物理结构:

1. 连续结构:文件的信息存放在若干连续的物理块中。

    FCB中保存文件块的起始块号和长度。

    优点:支持随机存取和顺序存取,所需的寻道时间和寻道次数最少,可以同时读入多个块,检索一个块很容易。

    缺点:文件不能动态增长,不利于文件插入和删除,有外部碎片(紧缩技术)

2. 链接结构:一个文件的信息存放在若干不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一个物理块。

    FCB只需要保存起始块号

    优点:提高了磁盘空间利用率,有利于文件的插入和删除,有利于文件动态扩充。

    缺点:存取速度慢,不适于随机存取,可靠性问题(如指针出错),更多的寻道次数和寻道时间,链接指针占有一定空间。

可以对链接结构进行变形:文件分配表(FAT),早期windows和U盘使用的结构。

FAT存放了所有的链接指针,每一个物理块对应FAT的一行。

图片 8

0表示空闲物理块,-1表示文件最后一块。

文件的起始块号保存在文件的FCB中。

3. 索引结构:一个文件的信息存放在若干不连续物理块中,系统为每个文件建立一个专用数据结构——索引表,并将这些物理块的块号存放在索引表中。

索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块。

FCB中用一个字段保存索引表的位置。

图片 9

索引结构优点:保持了链接结构的优点,解决了链接结构的缺点,既能顺序存取,又能随机存取,满足了文件动态增长,插入删除的要求,能充分利用磁盘。

缺点:较多的寻道时间和寻道次数,索引表本身带来了系统开销。

索引表有可能很大,需要多个物理块保存,就有多级索引和综合索引。

多级索引:

图片 10

UNIX三级索引结构:

图片 11

访问一个文件:文件名->文件目录->FCB->磁盘

提高文件系统性能:

磁盘调度:当有多个访盘请求等待时,采用一定的策略,对这些请求的服务顺序调整安排。降低平均磁盘服务时间,公平,高效。

磁盘调度算法:

  1. 先来先服务(FCFS),按访问请求到达的先后顺序服务。简单,公平,但是效率不高,相临两次请求可能会造成最内到最外柱面寻道,使磁头反复移动,增加了服务时间,对机械不利。
  2. 最短寻道时间优先,优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。改善了磁盘平均服务时间,但是造成某些访问请求长期等待得不到服务。
  3. 扫描算法(SCAN),当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续

图片 12

  1. 单向扫描调度算法(C-SCAN),总是从0号柱面开始向里扫描,移动到达最后一个柱面后,立即带动读写磁头快速返回到0号柱面。减少了新请求的最大延迟。
  2. N-step-SCAN策略,把磁盘请求队列分成长度为N的子队列,每一次用SCAN处理一个子队列,克服“磁头臂的粘性”。
  3. FSCAN,使用两个子队列,扫描开始时,所有请求都在一个队列中,而另一个队列为空。扫描过程中,所有新到的请求都保存在另一个队列中,对新请求的服务延迟到处理完所有老请求之后。
  4. 旋转调度算法,根据延迟时间来决定执行次序的调度。三种情况:1. 若干等待访问者请求访问同一磁头上的不同扇区,2. 若干等待访问者请求访问不同磁头上的不同编号的扇区,3. 若干等待访问者请求访问不同磁头上具有相同的扇区。

图片 13

3. 为了执行这个helloworld程序,操作系统会创建一个新的进程,并将该程序的可执行文件格式映射到该进程结构,表示由该进程来执行这个程序。

进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。

PCB,进程控制块,操作系统用于管理控制进程的一个专门数据结构,进程与PCB是一一对应的。

PCB中有:

进程描述信息:进程标识符(唯一),进程名,用户标识符,进程组关系

进程控制信息:优先级,代码执行入口地址,程序的磁盘地址,运行统计信息(执行时间,页面调度),进程间同步和通信,进程的队列指针,进程的消息队列指针。

所拥有的资源和使用情况:虚拟地址空间的状况,打开文件列表

CPU现场信息:寄存器值(通用寄存器,程序计数器PC,进程状态字PSW,栈指针),指向该进程页表的指针。

进程表:所有PCB的集合。

进程状态:

图片 14

操作系统为每一类进程(就绪、等待……)建立一个或多个队列,队列元素为PCB,伴随进程状态改变,其PCB从一个队列进入另一个队列。

图片 15

进程的创建:

  • 给新进程分配一个唯一标识以及PCB
  • 为进程分配地址空间
  • 初始化PCB(设置默认值,如状态为NEW……)
  • 设置相应的队列指针(如把新进程加到就绪队列链表中)

操作系统为每个进程都分配了一个地址空间。

由于性能,开销等考虑,引入了线程的概念。

线程的开销小,创建新线程花费的时间少,线程间切换花费时间少,线程之间互相通信无须调用内核(同一进程的线程共享内存和文件)

线程是进程中的一个运行实体,是CPU的调度单位。

4. 操作系统将控制权交给调度程序,如果调度程序选中了helloworld程序,由操作系统为该程序设置CPU上下文环境,并跳到程序开始处,准备执行该程序。那么下一个指令周期就是执行helloworld程序了。

CPU调度:按一定的调度算法从就绪队列中选择一个进程,把CPU的使用权交给被选择的进程。如果没有就绪进程,系统会安排一个空闲进程。

本文由澳门新葡亰手机版发布于操作系统,转载请注明出处:鼠标事件,转载文章

上一篇:Docker的介绍和安装,win10关机指示灯亮解决办法 下一篇:vim常用操作,将系统所在分区对拷至新硬盘的艺
猜你喜欢
热门排行
精彩图文