(provider:
共享内存提供程序,
error:
0
-
管道的另一端上无任何进程。
用windows身份登录management
studio,
点击站点属性,将安全选项
更改为:windows
和sql混合身份登录,解决。
问题二:
SQL2005企业管理器登录时选用windows身份验证一切顺利,然而使用sql
server身份验证即sa用户名登录时,却出现以下错误提示“provider:
共享内存提供程序,
error:
0
-
管道的另一端上无任何进程”。
于是按以下步骤修改设置:
既然windows身份验证能够通过,就以该身份先登录进管理器,然后在服务器属性中有一项服务器身份验证,设为sql
server和windows身份验证模式。下一步,在安全--登录中设置sa用户的属性,在状态一栏中有“登录”一项,默认是禁用,改为启用。修改完成后,重启企业管理器以sa用户名进行登录,问题依旧。想了半天,原来在设置完“sql
server和windows身份验证模式”后,要求重启服务。当时设置完成后只是重新开启了企业管理器,其服务并没重新启动。
因此找到“SQL
Server
外围应用配置器”,运行后,选择“服务和连接外围应用配置器”,先停止SQLEXPRESS一下,再启动一次。至此问题应该解决了。
这是复制的,这种问题上网搜搜有好多的。
http://www.cnblogs.com/Kings1665/archive/2009/08/16/1547534.html
Linux的2.2.x内核支持多种共享内存方式,如mmap()系统调用,Posix共享内存,以及系统V共享内存。
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。
系统V共享内存原理
进程间需要共享的数据被放在一个叫做IPC共享内存区域的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。系统V共享内存通过shmget获得或创建一个IPC共享内存区域,并返回相应的标识符。内核在保证shmget获得或创建一个共享内存区,初始化该共享内存区相应的shmid_kernel结构注同时,还将在特殊文件系统shm中,创建并打开一个同名文件,并在内存中建立起该文件的相应dentry及inode结构,新打开的文件不属于任何一个进程(任何进程都可以访问该共享内存区)。所有这一切都是系统调用shmget完成的。
Linux 有一个系统调用叫 mmap(),这个 mmap() 可以把一个文件映射到进程的地址空间(进程使用的虚拟内存),这样进程就可以通过读写这个进程地址空间来读写这个文件。
你可能会觉得奇怪,我明明写的是内存啊,怎么会变成写文件了呢?他们之间是怎么转化的呢?
没错,你写的确实是内存,但是你写的这个内存不是普通的内存,你写在这个内存上的内容,过段时间后会被内核写到这个文件上面。而写文件,其实最后都会变成写数据到设备里(硬盘、Nand Flash 等)。
mmap的优点主要在为用户程序随机的访问, *** 作,文件提供了一个方便的 *** 作方法;其次就是为不同进程共享大批量数据提供高效的手段;另外就是对特大文件(无法一次性读入内存)的处理提供了一种有效的方法。
内核里存在着一个特殊的文件系统,这个文件系统的存储介质不是别的,正是 RAM。
在 shmget() 调用之后,系统会为你在这个文件系统上创建一个文件,但是这个时候仅仅是创建了这个文件。
然后你就应该调用 shmat() 了,调用 shmat() 之后,内核会使用 mmap 把这个文件映射到你的进程地址空间,这个时候你就能直接读写映射后的地址了。
过段时间,内核把你写的 内容写到了文件里面,但是,这个文件的存储介质是内存,所以他会怎么做?看明白了吧?
答案:他会写入内存呀
我们先来看看如果不使用内存映射文件的处理流程是怎样的,首先我们得先读出磁盘文件的内容到内存中,然后修改,最后回写到磁盘上。第一步读磁盘文件是要经过一次系统调用的,它首先将文件内容从磁盘拷贝到内核空间的一个缓冲区,然后再将这些数据拷贝到用户空间,实际上是两次数据拷贝。第三步回写也一样也要经过两次数据拷贝。
所以我们基本上会有四次数据的拷贝了,因为大文件数据量很大,几十GB甚至更大,所以拷贝的开销是非常大的。
而内存映射文件是 *** 作系统的提供的一种机制,可以减少这种不必要的数据拷贝,从而提高效率。它由mmap()将文件直接映射到用户空间,mmap()并没有进行数据拷贝,真正的数据拷贝是在缺页中断处理时进行的,由于mmap()将文件直接映射到用户空间,所以中断处理函数根据这个映射关系,直接将文件从硬盘拷贝到用户空间,所以只进行了一次数据拷贝 ,比read进行两次数据拷贝要好上一倍,因此,内存映射的效率要比read/write效率高。
一般来说,read write *** 作可以满足大多数文件 *** 作的要求,但是对于某些特殊应用领域所需要的几十GB甚至更大的存储,这种通常的文件处理方法进行处理显然是行不通的。
mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的 *** 作,删除特定地址区域的对象映射。
当使用mmap映射文件到进程后,就可以直接 *** 作这段虚拟地址进行文件的读写等 *** 作,不必再调用read,write等系统调用.但需注意,直接对该段内存写时不会写入超过当前文件大小的内容.
参考地址:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)